MF_LUdecompose MD_LUdecompose ME_LUdecompose
MCF_LUdecompose MCD_LUdecompose MCE_LUdecompose
FunktionLU-Faktorisierung (engl. LU decomposition)
Syntax C/C++#include <MFstd.h>
int MF_LUdecompose( fMatrix LU, uVector Ind, fMatrix MA, ui len );
C++ MatObj#include <OptiVec.h>
void matrix<T>::LUdecompose( vector<unsigned> Ind, const matrix<T>& MA );
void matrix<T>::LUdecompose( vector<unsigned>* Ind, const matrix<T>& MA );
Pascal/Delphiuses MFstd;
function MF_LUdecompose( MLU:fMatrix; Ind:uVector; MA:fMatrix; len:UIntSize ):Integer;
BeschreibungMA wird in ein Produkt MA = L * U zerlegt, wobei L eine untere Dreiecksmatrix ist (engl. lower-triangular), deren Diagonal-Elemente alle gleich 1 sind, und U ist eine obere Dreiecks-Matrix (engl. upper-triangular). Da die Gesamtzahl der nicht-trivialen Elemente von L und U gerade in eine Matrix derselben Dimensionen wie MA paßt, wird das Ergebnis in einer einzelnen Matrix LU anstelle von getrennten Matrizen L und U abgelegt. Tatsächlich sind es auch gar nicht die "wahren" Matrizen L und U, die zu MLU kombiniert werden, sondern eine Zeilen-Permutation, deren Indizes in dem Vektor Ind angegeben sind. Der Rückgabewert zeigt an, ob die Anzahl der Permutationen gerade war (+1) oder ungerade (-1).

MA darf von MLU überschrieben werden, falls gewünscht. Um zu prüfen, ob MF_LUdecompose erfolgreich war, rufe man MF_LUDresult, deren Rückgabewert FALSE (0) sein wird, wenn MA fehlerfrei faktorisiert werden konnte, und TRUE (1) für eine singuläre Eingabe-Matrix A.

Es gibt Anwendungen, wo es sinnvoll ist, (nahezu) singuläre Matrizen durch "Pivot-Editierung" zerlegbar zu machen, indem man für die bei der Zerlegung verwandte partielle Pivotisierung einen Minimalwert festlegt. Falls bei der Pivotisierung kein Diagonal-Element gefunden werden kann, das betragsmäßig größer als der Minimalwert ist, wird auf diesen anstelle des verschwindenden Diagonalelementes normalisiert. Auf diese Weise werden Divisionen durch Zahlen nahe oder gleich Null vermieden. Die Einstellung der Pivot-Editierung erfolgt über MF_LUDsetEdit. Standardmäßig ist Pivot-Editierung ausgeschaltet.

Wenn Sie die Performance von OptiVec mit anderen Produkten vergleichen, beachten Sie bitte, daß für die Implementierung der vorliegenden Funktion bewußt nicht der schnellstmögliche Algorithmus gewählt wurde. Vielmehr werden alle intern benötigten Skalarprodukte doppelt- bzw. extended-genau akkumuliert, um uuml;bermäßiges Anwachsen von Rundungsfehlern zu vermeiden. Dies bedeutet natürlich, daß die schnelleren SIMD-Befehle nicht angewandt werden konnten.

FehlerbehandlungIm Falle einer singulären Matrix bleibt MLU undefiniert, und ein internes Register wird gesetzt, aber keine Fehlermeldung ausgegeben. Um das eventuelle Auftreten eines Fehlers zu überprüfen, rufe man MF_LUDresult.
Rückgabewert+1 oder -1, zeigt eine gerade oder ungerade Anzahl von Zeilen-Permutationen an
QuerverweisKap. 10

MatrixLib Inhaltsverzeichnis  OptiVec Home