2012-04-04 3 views
3

Ich mache eine kleine Matrix-Operations-Bibliothek als eine Programmieraufgabe für mich selbst (und für den Zweck, mit Python zu programmieren), und ich bin auf die Aufgabe gestoßen der Berechnung der Determinante von 2x2, 3x3 und 4x4 Matrizen.Python-Determinantenberechnung (ohne die Verwendung externer Bibliotheken)

Soweit mein Verständnis der linearen Algebra geht, muss ich die Regel von Sarrus implementieren, um die ersten 2 zu tun, aber ich weiß nicht, wie man das Python oder für Matrizen größerer Größe angehen. Alle Hinweise, Tipps oder Anleitungen würden sehr geschätzt werden.

+5

Lesen up auf LU Dekomposition. Sobald Ihre Matrix LU zerlegt ist, können Sie die Diagonale der U-Matrix verwenden, um die Determinante zu berechnen. –

Antwort

6

Die Regel von Sarrus ist nur eine Gedächtnisstütze für die Lösung von 3x3 Determinanten und wird nicht so hilfreich sein, wenn man über diese Größe hinausgeht.

Sie sollten die Leibniz-Formel zur Berechnung der Determinante einer beliebig großen quadratischen Matrix untersuchen. Das Schöne an dieser Formel ist, dass die Determinante einer Matrix darin besteht, dass sie in Bezug auf eine Kombination der Determinanten einiger ihrer (n-1)*(n-1) Submatrizen bestimmt werden kann, was sich gut für eine rekursive Funktionslösung eignet.

Wenn Sie den Algorithmus hinter der Leibniz-Formel verstehen, und Sie mit rekursiven Funktionen gearbeitet haben, wird es einfach, dies in Code (Python oder anders) zu übersetzen, und dann können Sie die Determinante von 4x4 finden Matrizen und darüber hinaus!

+0

Danke, Jason! – trainreq

0

Wenn M-Matrix von Schwimmern ist, hier ist eine hässliche Version von Kondensationsverfahren (chio?), ich denke, es funktioniert ...
i Python bin mit 2.7.2

from itertools import product, islice 

def det(M,prod=1): 
    dim = len(M) 
    if dim == 1: 
     return prod * M.pop().pop() 
    it = product(xrange(1,dim),repeat=2) 
    prod *= M[0][0] 
    return det([[M[x][y]-M[x][0]*(M[0][y]/M[0][0]) for x,y in islice(it,dim-1)] for i in xrange(dim-1)],prod)