Für lineare Gleichungssysteme werden die Gleichungen
MatrixLHSMatrixLHSMatrixLHSMatrixLHSmatrixLHS * MatrixResultMatrixResultMatrixResultMatrixResultmatrixResult = MatrixRHSMatrixRHSMatrixRHSMatrixRHSmatrixRHS
gelöst. Hierfür muss die Matrix MatrixLHSMatrixLHSMatrixLHSMatrixLHSmatrixLHS quadratisch und
der Parameter EpsilonEpsilonEpsilonEpsilonepsilon 0 sein. Der Matrixtyp der
Matrix MatrixLHSMatrixLHSMatrixLHSMatrixLHSmatrixLHS kann über den Parameter
MatrixLHSTypeMatrixLHSTypeMatrixLHSTypeMatrixLHSTypematrixLHSType gewählt werden. Die folgenden Werte stehen
zur Verfügung: 'general'"general""general""general""general" für allgemeine,
'symmetric'"symmetric""symmetric""symmetric""symmetric" für symmetrische, 'positive_definite'"positive_definite""positive_definite""positive_definite""positive_definite"
für symmetrisch positiv definite und 'tridiagonal'"tridiagonal""tridiagonal""tridiagonal""tridiagonal" für
tridiagonale Matrizen, 'upper_triangular'"upper_triangular""upper_triangular""upper_triangular""upper_triangular" für obere,
'permuted_upper_triangular'"permuted_upper_triangular""permuted_upper_triangular""permuted_upper_triangular""permuted_upper_triangular" für permutierte obere,
'lower_triangular'"lower_triangular""lower_triangular""lower_triangular""lower_triangular" für untere und
'permuted_lower_triangular'"permuted_lower_triangular""permuted_lower_triangular""permuted_lower_triangular""permuted_lower_triangular" für permutierte untere
Dreiecksmatrizen.
Für ein lineares Kleinste-Quadrate Problem oder die Wahl
EpsilonEpsilonEpsilonEpsilonepsilon ungleich 0 muss die Matrix MatrixLHSMatrixLHSMatrixLHSMatrixLHSmatrixLHS
nicht quadratisch sein. Die Kleinste-Quadrate Lösung wird mittels
einer Singulärwertzerlegung der Matrix MatrixLHSMatrixLHSMatrixLHSMatrixLHSmatrixLHS durch
Minimieren von
||MatrixRHSMatrixRHSMatrixRHSMatrixRHSmatrixRHS - MatrixLHSMatrixLHSMatrixLHSMatrixLHSmatrixLHS * MatrixResultMatrixResultMatrixResultMatrixResultmatrixResult||
berechnet. Alle Singulärwerte, die kleiner als EpsilonEpsilonEpsilonEpsilonepsilon
* dem größten Singulärwert sind, werden 0 gesetzt.
Für diese Werte wird keine interne Division vorgenommen um einer
Division durch 0 vorzubeugen. Ebenfalls darf die Matrix
MatrixLHSMatrixLHSMatrixLHSMatrixLHSmatrixLHS in diesem Fall einen Rangdefekt aufweisen. Als
Matrixtyp muss MatrixLHSTypeMatrixLHSTypeMatrixLHSTypeMatrixLHSTypematrixLHSType = 'general'"general""general""general""general" gewählt
werden.
Bemerkung: Die relative Genauigkeit der Gleitkommarepräsentation
des genutzten Datentyps (double) ist EpsilonEpsilonEpsilonEpsilonepsilon = 2.2204e-16.
Achtung
Wird MatrixLHSTypeMatrixLHSTypeMatrixLHSTypeMatrixLHSTypematrixLHSType = 'symmetric'"symmetric""symmetric""symmetric""symmetric",
'positive_definite'"positive_definite""positive_definite""positive_definite""positive_definite" oder 'upper_triangular'"upper_triangular""upper_triangular""upper_triangular""upper_triangular"
gewählt, so muss der obere Dreiecksteil der Eingabematrix
MatrixLHSMatrixLHSMatrixLHSMatrixLHSmatrixLHS die relevante Information der Matrix beinhalten.
Der exakt untere Teil der Matrix wird nicht verwendet. Wird
MatrixLHSTypeMatrixLHSTypeMatrixLHSTypeMatrixLHSTypematrixLHSType = 'lower_triangular'"lower_triangular""lower_triangular""lower_triangular""lower_triangular" gewählt, so muss
der untere Dreiecksteil der Eingabematrix MatrixLHSMatrixLHSMatrixLHSMatrixLHSmatrixLHS die
relevante Information der Matrix beinhalten. Der exakt obere
Teil der Matrix wird nicht verwendet. Wird MatrixLHSTypeMatrixLHSTypeMatrixLHSTypeMatrixLHSTypematrixLHSType =
'tridiagonal'"tridiagonal""tridiagonal""tridiagonal""tridiagonal" gesetzt, wird nur die Hauptdiagonale und
die beiden Nebendiagonalen der Eingabematrix MatrixLHSMatrixLHSMatrixLHSMatrixLHSmatrixLHS
genutzt. Die anderen Teile der Matrix werden nicht verwendet.
Wenn der verwendete Teil der Eingabematrix MatrixLHSMatrixLHSMatrixLHSMatrixLHSmatrixLHS nicht
vom spezifizierten Typ ist, wird eine Fehlerbehandlung
durchgeführt.
Ausführungsinformationen
Multithreading-Typ: reentrant (läuft parallel zu nicht-exklusiven Operatoren).
Multithreading-Bereich: global (kann von jedem Thread aufgerufen werden).
Sind die Parameterwerte korrekt, dann liefert solve_matrixsolve_matrixSolveMatrixSolveMatrixSolveMatrix
den Wert 2 (H_MSG_TRUE). Gegebenenfalls wird eine Fehlerbehandlung
durchgeführt.
David Poole: „Linear Algebra: A Modern Introduction“; Thomson;
Belmont; 2006.
Gene H. Golub, Charles F. van Loan: „Matrix Computations“; The
Johns Hopkins University Press; Baltimore and London; 1996.