scipy.linalg.

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 L zurück, so dass die Faktorisierung A = L D L^H oder A = L D L^T gilt. 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 Permutationsmatrix P.dot(lu), wobei P eine spaltenpermutierte Einheitsmatrix I[:, 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().T oder A = A.T angenommen 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.

Siehe auch

cholesky, lu

Hinweise

Diese Funktion verwendet die Routinen ?SYTRF für symmetrische Matrizen und ?HETRF fü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 Sie l, ‘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.]])