MF_safeSolve MD_safeSolve ME_safeSolve
Funktion"sicheres" Lösen eines linearen Gleichungs-Systems MA * X = B; im Falle singulärer Systeme wird eine einzige Lösung aus dem unendlichen Lösungsraum ausgewählt
Syntax C/C++#include <MFstd.h>
int MF_safeSolve( fVector X, fMatrix MA, fVector B, ui len );
int MF_safeSolvewEdit( fVector X, fMatrix MA, fVector B, ui len, float thresh );
C++ MatObj#include <OptiVec.h>
void vector<T>::safeSolve( const matrix<T>& MA, const vector<T>& B );
void vector<T>::safeSolvewEdit( const matrix<T>& MA, const vector<T>& B, T thresh );
Pascal/Delphiuses MFstd;
function MF_safeSolve( X:fVector; MA:fMatrix; B:fVector; len:UIntSize ):Integer;
function MF_safeSolvewEdit( X:fVector; MA:fMatrix; B:fVector; len:UIntSize; thresh:Single ):Integer;
BeschreibungMF_safeSolve ist ähnlich MF_solve mit dem Unterschied, dass, falls es keine eindeutige Lösung des linearen Gleichungssystems gibt (also die LU-Faktorisierung fehlschlägt), mittels Singulärwert-Zerlegung (SVD) wenigstens eine Lösung aus dem unendlichen Lösungsraum gefunden wird. Man beachte, dass das Problem singulärer linearer Gleichungssysteme nicht etwa darin besteht, dass es keine Lösung gäbe, sondern dass diese Systeme im Gegenteil unter-determiniert sind und eine unendliche Zahl von Lösungen besitzen. Mit anderen Worten, es können ein oder mehrere Elemente des Lösungsvektors willkürlich gewählt werden. Genau dies tut MF_safeSolve, und zwar in der Weise, dass der Lösungsvektor mit der kleinsten Euclid-schen Norm (s. VF_Euclid) bestimmt wird.

Ein Rückgabewert von 0 zeigt an, dass eine eindeutige Lösung gefunden wurde (d.h. Erfolg über LUD); 1 zeigt eine Lösung über SVD, und -1 wird in dem sehr seltenen Fall zurückgegeben, dass auch SVD fehlschlägt.

Die Entscheidung zwischen LUD und SVD ebenso wie die Singulärwert-Editierung im Falle der Wahl des SVD-Zweigs wird dabei aufgrund der Standard-Schwelle für die Dimensions-Reduktion durch SV-Editierung getroffen. Diese 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_safeSolve usw. einzustellen. Anstatt wiederholt den Standard-Wert zu ändern, gebrauche man vielmehr die "wEdit"-Varianten von MF_safeSolve usw., also MF_safeSolvewEdit, MF_SVsolvewEdit und MF_solveBySVDwEdit.

QuerverweisMF_solve,   Kap. 10

MatrixLib Inhaltsverzeichnis  OptiVec Home