ldl#
- scipy.linalg.ldl(A, lower=True, hermitian=True, overwrite_a=False, check_finite=True)[Quelle]#
Berechnet die LDLt- oder Bunch-Kaufman-Faktorisierung einer symmetrischen/hermiteschen Matrix.
Diese Funktion gibt eine blockdiagonale Matrix D bestehend aus Blöcken der Größe maximal 2x2 und auch eine möglicherweise permutierte untere Einheitsdreiecksmatrix
Lzurück, so dass die FaktorisierungA = L D L^HoderA = L D L^Tgilt. Wenn lower False ist, werden obere Dreiecksmatrizen (wieder möglicherweise permutiert) als äußere Faktoren zurückgegeben.Das Permutationsarray kann verwendet werden, um die äußeren Faktoren durch einfaches Austauschen von Zeilen zu triangulieren, d.h.
lu[perm, :]ist eine obere/untere Dreiecksmatrix. Dies entspricht auch der Multiplikation mit einer PermutationsmatrixP.dot(lu), wobeiPeine spaltenpermutierte EinheitsmatrixI[:, perm]ist.Abhängig vom Wert des booleschen lower wird nur der obere oder untere Dreiecksteil des Eingabearrays referenziert. Daher würde eine Dreiecksmatrix bei der Eingabe das gleiche Ergebnis liefern, als wenn die vollständige Matrix übergeben wird.
Die Dokumentation wurde unter der Annahme verfasst, dass die Array-Argumente bestimmte „Kern“-Formen haben. Array-Argumente dieser Funktion können jedoch zusätzliche „Batch“-Dimensionen vorangestellt haben. In diesem Fall wird das Array als Stapel von niedrigdimensionalen Schnitten behandelt; siehe Gestapelte lineare Operationen für Details.
- Parameter:
- Aarray_like
Quadratisches Eingabearray
- lowerbool, optional
Dies schaltet zwischen den unteren und oberen Dreiecks-Außenfaktoren der Faktorisierung um. Untere Dreiecksmatrix (
lower=True) ist der Standard.- hermitianbool, optional
Für komplexwertige Arrays bestimmt dies, ob
A = A.conj().ToderA = A.Tangenommen wird. Für reellwertige Arrays hat dieser Schalter keine Auswirkung.- overwrite_abool, optional
Erlaubt das Überschreiben von Daten in A (kann die Leistung verbessern). Der Standardwert ist False.
- check_finitebool, optional
Ob überprüft werden soll, ob die Eingabematrizen nur endliche Zahlen enthalten. Das Deaktivieren kann zu einer Leistungssteigerung führen, kann aber zu Problemen (Abstürzen, Nicht-Terminierung) führen, wenn die Eingaben Unendlichkeiten oder NaNs enthalten.
- Rückgabe:
- lundarray
Der (möglicherweise) permutierte obere/untere Dreiecks-Außenfaktor der Faktorisierung.
- dndarray
Der blockdiagonale Multiplikator der Faktorisierung.
- permndarray
Das Zeilenpermutations-Indexarray, das `lu` in Dreiecksform bringt.
- Löst aus:
- ValueError
Wenn das Eingabearray nicht quadratisch ist.
- ComplexWarning
Wenn ein komplexwertiges Array mit von Null verschiedenen Imaginärteilen auf der Diagonalen gegeben wird und `hermitian` auf True gesetzt ist.
Hinweise
Diese Funktion verwendet die Routinen
?SYTRFfür symmetrische Matrizen und?HETRFfür hermitesche Matrizen aus LAPACK. Einzelheiten zum Algorithmus finden Sie in [1].Abhängig vom Wert des Schlüsselworts lower wird nur der untere oder obere Dreiecksteil des Eingabearrays referenziert. Darüber hinaus definiert dieses Schlüsselwort auch die Struktur der äußeren Faktoren der Faktorisierung.
Hinzugefügt in Version 1.1.0.
Referenzen
[1]J.R. Bunch, L. Kaufman, Some stable methods for calculating inertia and solving symmetric linear systems, Math. Comput. Vol.31, 1977. DOI:10.2307/2005787
Beispiele
Gegeben ein oberes Dreiecksarray
a, das die vollständige symmetrische Matrix mit seinen Einträgen repräsentiert, erhalten Siel, ‘d’ und den Permutationsvektor perm>>> import numpy as np >>> from scipy.linalg import ldl >>> a = np.array([[2, -1, 3], [0, 2, 0], [0, 0, 1]]) >>> lu, d, perm = ldl(a, lower=0) # Use the upper part >>> lu array([[ 0. , 0. , 1. ], [ 0. , 1. , -0.5], [ 1. , 1. , 1.5]]) >>> d array([[-5. , 0. , 0. ], [ 0. , 1.5, 0. ], [ 0. , 0. , 2. ]]) >>> perm array([2, 1, 0]) >>> lu[perm, :] array([[ 1. , 1. , 1.5], [ 0. , 1. , -0.5], [ 0. , 0. , 1. ]]) >>> lu.dot(d).dot(lu.T) array([[ 2., -1., 3.], [-1., 2., 0.], [ 3., 0., 1.]])