MF_solve MD_solve ME_solve
MCF_solve MCD_solve MCE_solve
Funktionlineares Gleichungssystem lösen
Syntax C/C++#include <MFstd.h>
int MF_solve( fVector X, fMatrix MA, fVector B, ui len );
int MF_solvewEdit( fVector X, fMatrix MA, fVector B, ui len, float thresh );
int MCF_solvewEdit( cfVector X, cfMatrix MA, cfVector B, ui len, float thresh );
C++ MatObj#include <OptiVec.h>
void vector<T>::solve( const matrix<T>& MA, const vector<T>& B );
void vector<T>::solvewEdit( const matrix<T>& MA, const vector<T>& B, T thresh );
Pascal/Delphiuses MFstd;
function MF_solve( X:fVector; MA:fMatrix; B:fVector; len:UIntSize ): Integer;
function MF_solvewEdit( X:fVector; MA:fMatrix; B:fVector; len:UIntSize; thresh:Single ): Integer;
function MCF_solvewEdit( X:cfVector; MA:cfMatrix; B:cfVector; len:UIntSize; thresh:Single ): Integer;
BeschreibungDiese Funktion löst das lineare Gleichungs-System MA * X = B. Intern wird hierfür eine LU-Faktorisierung durchgeführt. Wenn das Gleichungssystem eine eindeutige Lösung besitzt, wird FALSE (0) zurückgegeben.
Wenn sich das Gleichungs-System aber als unter-determiniert herausstellt, was immer dann geschieht, wenn eine oder mehrere der Gleichungen tatsächlich Linearkombinationen anderer Gleichungen desselben Systems darstellen, wird die Matrix singulär, und die Lösung schlägt fehl mit einem Rückgabewert von TRUE (1).

Um in Situationen, wo man mit unter-determinierten Matrizen zu rechnen hat, Singularitäten zu umgehen, kann man einen Minimalwertes für die Pivotisierung bei der LU-Faktorisierung definieren. Standardmäßig ist diese Pivot-Editierung ausgeschaltet. Um sie für alle Aufrufe von MF_LUdecompose sowie den auf LU-Zerlegung basierenden Funktionen MF_inv und MF_solve einzuschalten, kann MF_LUDsetEdit aufgerufen werden. Da diese Methode nicht fiber-sicher ist, sollte sie aber nicht angewandt werden, um bei verschiedenen Aufrufen von MF_LUdecompose, MF_inv oder MF_solve verschiedene Minimalwerte einzustellen. Zu diesem Zweck dient vielmehr die Funktion MF_solvewEdit, die die gewünschte Editier-Schwelle als zusätzliches Argument thresh übernimmt.
Der Rückgabewert von MF_solve und MF_solvewEdit zeigt an, ob die Lösung des Gleichungssystems erfolgreich war:
 
RückgabewertBedeutung
0Matrix MA ist regulär; Gleichungssystem konnte erfolgreich gelöst werden
1Matrix MA ist singulär; Ergebnis X komplett unbrauchbar
2Matrix MA (nahezu) singulär; durch Pivot-Editierung konnte eine der unendlich vielen Lösungen gefunden werden; ob dieses Ergebnis brauchbar ist, hängt von der spezifischen Anwendung ab

Um zu prüfen, ob MF_solve erfolgreich war, kann in Single-Thread-Programmen auch MF_LUDresult aufgerufen werden, deren Rückgabewert FALSE (0) sein wird, wenn das Gleichungssystem eindeutig und ohne Pivot-Editierung gelöst werden konnte, und TRUE (1) für eine singuläre Eingabe-Matrix MA. Da in Multithread-Programmen ggf. nicht klar ist, auf welche Instanz von MF_solve sich MF_LUDresult bezieht, sollte hier nicht MF_LUDresult aufgerufen, sondern immer nur der Rückgabewert von MF_solve überprüft werden.

Alternativ zur Pivot-Editierung kann man auch MF_safeSolve oder MF_solveBySVD anstelle des einfachen MF_solve verwenden.

RückgabewertEin Code 0, 1 oder 2, siehe oben
QuerverweisMF_LUdecompose,   MF_inv,   Kap. 10

MatrixLib Inhaltsverzeichnis  OptiVec Home