Ihre Frage enthält eine Reihe von Problemen.
Verwenden Sie nicht die Gaußsche Eliminierung (LU-Faktorisierung), um den numerischen Rang einer Matrix zu berechnen. Die LU-Faktorisierung ist für diesen Zweck in der Gleitkommaarithmetik unzuverlässig. Verwenden Sie stattdessen eine rangaufschlussreiche QR-Zerlegung (z. B. xGEQPX
oder xGEPQY
in LAPACK, wobei x C, D, S oder Z ist, obwohl diese Routinen schwer zu finden sind; siehe die Antwort von JedBrown zu einer verwandten Frage ), oder verwenden Sie eine SVD (Singulärwertzerlegung wie xGESDD
oder xGESVD
, wobei x wieder C, D, S oder Z ist). Die SVD ist ein genauerer, zuverlässigerer Algorithmus zur Bestimmung des numerischen Ranges, erfordert jedoch mehr Gleitkommaoperationen.
Für die Lösung eines linearen Systems ist die LU-Faktorisierung (mit partiellem Schwenken, die Standardimplementierung in LAPACK) in der Praxis äußerst zuverlässig. Es gibt einige pathologische Fälle, in denen die LU-Faktorisierung mit partiellem Schwenken instabil ist (siehe Vorlesung 22 in Numerical Linear Algebra)von Trefethen und Bau für Details). Die QR-Faktorisierung ist ein stabilerer numerischer Algorithmus zum Lösen linearer Systeme, weshalb Sie wahrscheinlich so genaue Ergebnisse erhalten. Es erfordert jedoch mehr Gleitkommaoperationen als eine LU-Faktorisierung um den Faktor 2 für quadratische Matrizen (ich glaube, JackPoulson kann mich diesbezüglich korrigieren). Für rechteckige Systeme ist die QR-Faktorisierung die bessere Wahl, da sie Lösungen mit den kleinsten Quadraten für überbestimmte lineare Systeme liefert. SVD kann auch zum Lösen linearer Systeme verwendet werden, ist jedoch teurer als die QR-Faktorisierung.
janneb ist richtig, dass numpy.linalg.svd ein Wrapper xGESDD
in LAPACK ist. Singulärwertzerlegungen laufen in zwei Stufen ab. Zunächst wird die zu zersetzende Matrix in eine bidiagonale Form reduziert. Der Algorithmus, der in LAPACK zum Reduzieren auf Bidiagonalform verwendet wird, ist wahrscheinlich der Lawson-Hanson-Chan-Algorithmus und verwendet an einem Punkt die QR-Faktorisierung. Die Vorlesung 31 in Numerical Linear Algebra von Trefethen und Bau gibt einen Überblick über diesen Prozess. Dann xGESDD
wird ein Teile-und-Herrsche - Algorithmus die Singulärwerte und linke und rechte Singulärvektoren aus der Bidiagonalmatrix zu berechnen. Um Hintergrundinformationen zu diesem Schritt zu erhalten, müssen Sie Matrix Computations von Golub und Van Loan oder Applied Numerical Linear Algebra von Jim Demmel konsultieren .
Schließlich sollten Sie singuläre Werte nicht mit Eigenwerten verwechseln . Diese beiden Mengen sind nicht gleich. Die SVD berechnet die Singularwerte einer Matrix. Cleve Molers Numerical Computing mit MATLAB gibt einen schönen Überblick über die Unterschiede zwischen Singularwerten und Eigenwerten . Im Allgemeinen gibt es keine offensichtliche Beziehung zwischen den Singularwerten einer gegebenen Matrix und ihren Eigenwerten, außer im Fall von normalen Matrizen, bei denen die Singularwerte der Absolutwert der Eigenwerte sind.
dgesdd
für echte SVDs. Ihre eigentliche Frage lautet also wahrscheinlich: "Wie funktioniert Lapack Dgesdd?"