Syntax C/C++ | #include <MFstd.h>
void MF_LUimprove( fVector X, fVector B, fMatrix MA, fMatrix LU, uiVector Ind, ui len );
void MFb_LUimprove( fVector X, fVector B, fMatrix MA, fMatrix LU, uiVector Ind, ui len, fVector Buf ); |
C++ MatObj | #include <OptiVec.h>
void vector<T>::LUimprove( const vector<T> B, const matrix<T>& MA, const matrix<T>& MLU, const vector<ui>& Ind );
void vector<T>::LUbimprove( const vector<T> B, const matrix<T>& MA, const matrix<T>& MLU, const vector<ui>& Ind, vector<T> Buf ); |
Pascal/Delphi | uses MFstd;
procedure MF_LUimprove( X, B:fVector; MA, MLU:fMatrix; Ind:uiVector; len:UIntSize );
procedure MFb_LUimprove( X, B:fVector; MA, MLU:fMatrix; Ind:uiVector; len:UIntSize; Buf:fVector ); |
|
Beschreibung | Vor allem für große Matrizen können die akkumulierten Rundungsfehler bei der Matrix-Inversion recht groß werden. Führt man aber die Lösung eines linearen Gleichungs-Systems über LU-Zerlegung mittels MF_LUdecompose durch und bewahrt dabei die Eingabe-Matrix auf, so eröffnet sich die Möglichkeit, die numerische Genauigkeit der von MF_LUsolve berechneten Lösung iterativ zu verbessern. Hierzu rufe man anschließend an MF_LUsolve noch MF_LUimprove. Diese Funktion benötigt als Argumente: den Ausgabe-Vektor X von MF_LUsolve, den Vektor B des linearen Gleichungssystemes und sowohl die originale Matrix A als auch deren LU-faktorisierte Form MLU samt den Permutations-Indizes Ind.
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 beträgt len Elemente des jeweiligen Datentyps. |
|