Beschreibung | Diesen Funktionen lösen das lineare Gleichungs-System MA * X = B. Im allgemeinen Fall, MF_solve, wird hierfür eine LU-Faktorisierung durchgeführt. Für den Spezialfall symmetrischer Matrizen bietet MFsym_solve einen etwa doppelt so schnellen Weg mittels Cholesky-Faktorisierung.
Zuerst wird MF_solve beschrieben. MFsym_solve folgt am Schluss.
MF_solve hat immer dann Erfolg, wenn das Gleichungssystem eine eindeutige Lösung besitzt. In diesem Fall 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ückgabewert | Bedeutung |
0 | Matrix MA ist regulär; Gleichungssystem konnte erfolgreich gelöst werden |
1 | Matrix MA ist singulär; Ergebnis X komplett unbrauchbar |
2 | Matrix 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.
Für symmetrische Matrizen bietet MFsym_solve wie erwähnt einen schnelleren Weg zur Lösung. Diese Routine führt zunächst eine Cholesky-Faktorisierung durch. Nur in dem Fall, dass sich die Eingabe-Matrix dabei als nicht-positiv-definit herausstellt, wird doch wieder LUD angewandt. Der Rückgabewert von MFsym_solve zeigt an, ob das lineare Gleichungssystem erfolgreich gelöst werden konnte:
Rückgabewert | Bedeutung |
0 | Matrix MA ist regulär; Gleichungssystem konnte erfolgreich entweder über Cholesky oder über LUD gelöst werden |
1 | Matrix MA ist singulär; sowohl Cholesky als auch LUD scheiterten; Ergebnis X komplett unbrauchbar |
2 | Matrix MA (nahezu) singulär; über LUD konnte durch Pivot-Editierung eine der unendlich vielen Lösungen gefunden werden; ob dieses Ergebnis teilweise brauchbar ist, hängt von der spezifischen Anwendung ab |
|