Beschreibung | Die Inverse der Matrix MA wird in MInv gespeichert. Falls MA nicht regulär ist, also nicht invertiert werden kann, gibt MF_inv einen Fehler-Code zurück. Im allgemeinen Fall, MF_inv, wird die Inversion über LU-Faktorisierung mit partieller Pivotisierung durchgeführt. Im speziellen Fall symmetrischer Matrizen bietet MFsym_inv einen im Erfolgsfall etwa doppelt so schnellen Weg der Invertierung.
Um bei MF_inv ein Scheitern der Invertierung zu verhindern, kann ein Minimalwert für die Pivotisierung festgelegt werden. 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_invwEdit, die die gewünschte Editier-Schwelle als zusätzliches Argument thresh übernimmt.
Der Rückgabewert von MF_inv und MF_invwEdit zeigt an, ob die Invertierung erfolgreich war:
Rückgabewert | Bedeutung |
0 | Matrix MA ist regulär und konnte erfolgreich invertiert werden |
1 | Matrix MA ist singulär; Ergebnis MInv komplett unbrauchbar |
2 | Matrix MA (nahezu) singulär; konnte nur durch Pivot-Editierung invertiert werden; ob das Ergebnis brauchbar ist, hängt von der spezifischen Anwendung ab |
Um zu prüfen, ob MF_inv erfolgreich war, kann in Single-Thread-Programmen auch MF_LUDresult aufgerufen werden, deren Rückgabewert FALSE (0) sein wird, wenn MA fehlerfrei und ohne Pivot-Editierung invertiert 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_inv sich MF_LUDresult bezieht, sollte hier nicht MF_LUDresult aufgerufen, sondern immer nur der Rückgabewert von MF_inv überprüft werden.
Diese Funktionen benötigen Pufferspeicher. Die "Normal-Versionen" (Präfix MF_, MCF_ usw.) allozieren ihn selbst, während die Versionen mit den Präfixen MFb_, MCFb_ etc. als zusätzliches Aufruf-Argument einen Vektor Buf übernehmen. Die erforderliche Größe von Buf kann mittels Aufruf von MFb_inv_sizeBuf() abgefragt werden (Angabe nicht in byte, sondern als Zahl der Elemente von Buf im jeweiligen Datentyp!).
Wie erwähnt können symmetrische Matrizen u.U. wesentlich schneller mittels MFsym_inv invertiert werden. Syntax und Bedeutung des Rückgabewerts sind identisch mit MF_inv. Diese Funktion versucht zunächst Cholesky-Faktorisierung. Nur falls diese nicht erfolgreich ist (sich die Eingabe-Matrix also als nicht-positiv-definit herausstellt), wird doch der Weg über LUD beschritten. |