MF_solveBySVD
| MD_solveBySVD |
ME_solveBySVD |
|
Funktion | möglicherweise über- oder unter-determiniertes lineares Gleichungssystem über Singular-Value-Decomposition lösen |
|
Syntax C/C++ | #include <MFstd.h>
int MF_solveBySVD( fVector X, fMatrix MA, fVector B, ui htA, ui lenA );
int MF_solveBySVDwEdit( fVector X, fMatrix MA, fVector B, ui htA, ui lenA, float thresh ); |
C++ MatObj | #include <OptiVec.h>
void vector<T>::solveBySVD( const matrix<T>& MA, const vector<T>& B );
void vector<T>::solveBySVDwEdit( const matrix<T>& MA, const vector<T>& B, T thresh ); |
Pascal/Delphi | uses MFstd;
function MF_solveBySVD( X:fVector; MA:fMatrix; B:fVector; htA, lenA:UIntSize ): IntBool; function MF_solveBySVDwEdit( X:fVector; MA:fMatrix; B:fVector; htA, lenA:UIntSize; thresh:Single ): IntBool; |
|
Beschreibung | Das lineare Gleichungssystem MA * X = B wird unter Verwendung von Singulärwert-Zerlegung (Singular Value Decomposition, SVD) gelöst . Hier führen unterdeterminierte Systems nicht zu Fehlern. Vielmehr erhält man durch Dimensions-Reduktion eine einzelne Lösung aus dem unendlichen Lösungsraum. Hat man aber mehr Gleichungen als Unbekannte, handelt es sich also um ein überdeterminiertes System, enthält der Lösungs-Vektor X einen "Kompromiß" zwischen den Gleichungen unter Minimierung der Euclid'schen Norm des Lösungsvektors.
Diese Funktion sollte immer FALSE (0) zurückgeben. Nur in dem sehr unwahrscheinlichen Fall, dass der SVD-Algorithmus nicht konvergiert, wird TRUE (1) zurückgegeben. Die Länge des Lösungs-Vektors, sizX, muss gleich der Breite der Eingabe-Matrix, lenA, sein, während die Länge des Vektors B, sizB, gleich htA sein muss.
Die standardmäßig voreingestellte Schwelle für die Dimensions-Reduktion durch SV-Editierung kann mittels MF_SVDsetEdit verändert werden. Da allerdings MF_SVDsetEdit nicht fiber-sicher ist, sollte diese Funktion nicht verwendet werden, um verschiedene Schwellenwerte für verschiedene Aufrufe von MF_solveBySVD usw. einzustellen. Anstatt wiederholt den Standard-Wert zu ändern, gebrauche man vielmehr die "wEdit"-Varianten von MF_solveBySVD usw., also MF_solveBySVDwEdit, MF_SVsolvewEdit und MF_safeSolvewEdit. |
|
Rückgabewert | normalerweise FALSE (0); nur in dem sehr unwahrscheinlichen Fall eines Scheiterns von SVD wird TRUE (1) zurückgegeben. |
|
|