MF_solveBySVD MD_solveBySVD ME_solveBySVD
Funktionmö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/Delphiuses 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;
BeschreibungDas 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ückgabewertnormalerweise FALSE (0); nur in dem sehr unwahrscheinlichen Fall eines Scheiterns von SVD wird TRUE (1) zurückgegeben.
QuerverweisMF_SVdecompose,   MF_solve,   Kap. 10

MatrixLib Inhaltsverzeichnis  OptiVec Home