| Beschreibung | Die Matrix A mit den Dimensionen [ht, len] wird in ein Produkt
MA = MU * MW * MVT,
faktorisiert, wobei MU die Dimensionen [max(ht,len), len] hat. MW ist eine Diagonalmatrix, deren Elemente alle positiv oder 0 sind. Tatsächlich wird nur die Diagonale dieser Matrix in dem Vektor W der Größe [len] gespeichert. MV schließlich ist eine Quadratmatrix [len, len]. Sowohl MU als auch MV sind orthogonal:
MUT * MU = MVT * MV = (1).
Aufgrund dieser Orthogonalitäts-Beziehungen ist die Lösung eines linearen Gleichungssystem MA * X = B sehr einfach, hat man die beschriebene Faktorisierung erst einmal durchgeführt, da lediglich MW explizit invertiert werden muß:
X = MV * W-1 * MUT
(Diese Gleichung ist von rechts nach links zu berechnen.) Die Invertierung von MW ist auch wiederum einfach, da MW eine Diagonalmatrix ist und ihre Inverse aus den Kehrwerten der Diagonalelemente besteht. Diese Eigenschaft ist es, die SVD so nützlich macht, da sie sowohl eine Diagnose als auch eine Möglichkeit zur Behebung von Singularitäten bereitstellt. Falls eine Element von W sehr klein im Vergleich zu dem größten Element ist, entspricht dies einer Singularität (zumindest im Sinne numerischer Berechnungen, wo die Division durch extrem kleine Zahlen praktisch genauso schlecht ist wie eine Division durch 0). Eine Singularität bedeutet, daß das zugrundeliegende lineare Gleichungssystem unterdeterminiert ist. Dieses wiederum heißt, daß man willkürlich eine bestimmte Lösung aus dem unendlichen Lösungsraum herausgreifen kann. Insbesondere kann man W-1ii = 0 für sehr kleine Wii wählen - eine der seltenen Gelegenheiten, wo das Ergebnis einer Division durch (fast) 0 am besten gleich 0 anstelle von Unendlich zu setzen ist. Durch diese Editierung der isolierte Singulärwerte wird eine Dimensions-Reduktion des zugrundeliegenden Problems erreicht. Sie steht an zentraler Stelle bei allen auf SVD basierenden Routinen, wie z.B. MF_SVsolve, MF_safeSolve) und VF_linfit. Die Schwelle für die Dimensions-Reduktion wird durch MF_SVDsetEdit gesetzt.
Diese Funktion darf nicht aufgerufen werden, wenn die FPU auf reduzierte Genauigkeit geschaltet wurde. Andernfalls kann sie aufgrund nicht erreichter Konvergenz abstürzen, siehe V_setFPAccuracy.
Wenn Sie mittels MF_SVdecompose berechnete Ergebnisse mit SVD-Routinen anderer Anbieter vergleichen, beachten Sie bitte folgende Punkte:
- MF_SVdecompose nimmt selbst keine Dimensions-Reduktion (also keinen Ersatz sehr kleiner Singulärwerte durch 0) vor, sondern überläßt diesen Schritt nachfolgenden Funktionen oder ggf. manueller Inspektion durch den Anwender.
- Singulärwerte können vertauscht werden, wenn gleichzeitig auch die entsprechenden Spalten sowohl von MU als auch von MV vertauscht werden. Gelegentlich wird diese Eigenschaft genutzt, um die Singulärwerte in eine bestimmte (meist fallende) Reihenfolge zu bringen. Da der ästhetische Reiz geordneter Singulärwerte aber durch erhöhten Rechenaufwand erkauft wird, verzichtet MF_SVdecompose auf diese Ordnung.
- Das Vorzeichen eines Singulärwertes kann vertauscht werden, wenn gleichzeitig die entsprechende Spalte von MV mit -1 multipliziert wird. MF_SVdecompose nutzt diese Eigenschaft, um alle nicht-verschwindenden Singulärwerte positiv zu machen.
|