Schleife für Invertieren

Code-Stücke können hier veröffentlicht werden.
linda_96
User
Beiträge: 12
Registriert: Sonntag 14. März 2021, 14:13

Deswegen verstehe ich es nicht.
Mit meinem "Nachtrag" werden 35 Kombinationsmöglichkeiten generiert, die jeweils aus 3 Elementen bestehen. Soweit richtig.
In meiner for Schleife habe ich dann i,j und k als Variablen gesetzt und den Index angepasst.
Trotzdem erscheint der Error 'tuple index out of range' mit Verweis auf die erste Zeile der for Schleife.
Sirius3
User
Beiträge: 17710
Registriert: Sonntag 21. Oktober 2012, 17:20

Naja, wie sieht denn Dein A jetzt aus? Und wie willst Du aus einer 3D-Matrix die Inverse bilden?
linda_96
User
Beiträge: 12
Registriert: Sonntag 14. März 2021, 14:13

Code: Alles auswählen

import numpy as np
A = np.array( [ [2,4,0,1,1,0,0], [1,1,5,1,0,1,0], [0,1,1,1,0,0,1] ] )
b = np.array( [20,30,10] )
A
natürlich...
Sirius3
User
Beiträge: 17710
Registriert: Sonntag 21. Oktober 2012, 17:20

Bei einer 7x3-Matrix brauchst Du aber 4 Spalten, die Du löschen mußt, und nicht 3.
Außerdem hast Du nur eine 2D-Matrix, ein shape[2] existiert daher nicht, daher der IndexError.

Um nochmal zum Anfang zurückzukommen: meine zweite Variante des Codes ist der bessere, weil er mit beliebigen Matrizen arbeiten kann.
linda_96
User
Beiträge: 12
Registriert: Sonntag 14. März 2021, 14:13

Die Löschvorgabe habe ich leider.

Code: Alles auswählen

import numpy as np
A = np.array( [ [2,4,0,1,1,0,0], [1,1,5,1,0,1,0], [0,1,1,1,0,0,1] ] )
b = np.array( [20,30,10] )
A

Code: Alles auswählen

from itertools import combinations
def comb(arr,r):
    return list(combinations(arr,r))
arr = np.array( [0,1,2,3,4,5,6] )
r = 4
print(comb(arr,r))

Code: Alles auswählen

for i,j,k,l in comb(range(A.shape[4]), 2):
    teil_von_A = np.delete(A, [i, j, k, l], axis=1)
    if np.linalg.det(teil_von_A) != 0:
        inverse_von_A = np.linalg.inv(teil_von_A)
        x = inverse_von_A.dot(b)
        print("Diese x nehmen den Wert 0 an: ", i+1, ",", j+1, ",", k+1, ",", l+1, "\n")
        if (x>=0).all():
            print("Die übrigen x nehmen folgende Werte an: ", x, "\n\n")
        else:
            print("Diese Lösung kommt nicht in Frage, weil x negative Werte annimmt\n\n")
    else:
        print("Diese x nehmen den Wert 0 an: ", i+1, ",", j+1, ",", k+1, ",", l+1, "\n")
        print("Diese Lösung kommt nicht in Frage, weil die Matrix nicht invertierbar ist \n\n")
...und immer noch ist "tupel index out of range"
linda_96
User
Beiträge: 12
Registriert: Sonntag 14. März 2021, 14:13

Ich finde wirklich nicht, wo der Fehler liegt...
Sirius3
User
Beiträge: 17710
Registriert: Sonntag 21. Oktober 2012, 17:20

Warum hast du eine Vorgabe, die so vieles komplizierter macht? Beim Programmieren möchte man möglichst allgemeingültige Algorithmen benutzen.

Wieso hast Du jetzt shape[4]? Eine 5 Dimensionale Liste hast Du auch nicht.
Antworten