LU-Zerlegung bedeutet das Zerlegen einer quadratischen Matrix A in L und U, so dass das Produkt der unteren Dreiecksmatrix L und der oberen Dreiecksmatrix U, dh A = LU, gilt. Es wird zum Lösen simultaner Gleichungen, zum Berechnen inverser Matrizen und zum Berechnen von Matrixgleichungen verwendet. Es gibt viele Lösungen wie analytische Lösungen, Gaußsche Eliminierungsmethoden und rekursive Methoden. Das Paar von L und U scheint eindeutig bestimmt zu sein, aber es hängt von den Bedingungen ab.
halten. Bitte tritt uns bei.
Bestätigen Sie, dass die 3x3-Matrix $ A $ in eine obere Dreiecksmatrix $ U $ und eine untere Dreiecksmatrix $ L $ mit Drehpunkten auf diagonalen Elementen zerlegt werden kann.
U ist eine obere Dreiecksmatrix mit Drehpunkten auf diagonalen Elementen. L ist die untere Dreiecksmatrix. A kann durch das Eliminierungsverfahren in eine obere Dreiecksmatrix und eine untere Dreiecksmatrix zerlegt werden.
A=\left(
\begin{array}{cc}
1 & 2 & 1 \\
0 & 1 & 1 \\
2 & 7 & 9 \\
\end{array}
\right)
Um dann Element 2 in der 3. Zeile und 1. Spalte von $ A $ zu löschen, subtrahieren Sie zweimal von der 3. Zeile zur 1. Zeile.
\left(
\begin{array}{cc}
1 & 2 & 1 \\
0 & 1 & 1 \\
0 & 3 & 7 \\
\end{array}
\right)
Als nächstes kann Element 3 in der 3. Zeile und 2. Spalte gelöscht werden, indem die 2. Zeile mit 3 multipliziert und von der 3. Zeile subtrahiert wird.
\left(
\begin{array}{cc}
1 & 2 & 1 \\
0 & 1 & 1 \\
0 & 0 & 4 \\
\end{array}
\right)
Um dieses Verfahren zusammenzufassen
\left(
\begin{array}{cc}
1 & 2 & 1 \\
0 & 1 & 1 \\
2 & 7 & 9 \\
\end{array}
\right)
\ \rightarrow \
\left(
\begin{array}{cc}
1 & 2 & 1 \\
0 & 1 & 1 \\
0 & 3 & 7 \\
\end{array}
\right)
\ \rightarrow \
\left(
\begin{array}{cc}
1 & 2 & 1 \\
0 & 1 & 1 \\
0 & 0 & 4 \\
\end{array}
\right)
Wird sein.
Durch Multiplizieren einer Matrix von links von $ A $ kann das Eliminierungsverfahren unter Verwendung der Matrix durchgeführt werden. Löschen Sie zunächst Element 2 von $ A $.
\left(
\begin{array}{rr}
1 & 0 & 0 \\
0 & 1 & 0 \\
-2 & 0 & 1 \\
\end{array}
\right)
\left(
\begin{array}{rr}
1 & 2 & 1 \\
0 & 1 & 1 \\
2 & 7 & 9 \\
\end{array}
\right)
=
\left(
\begin{array}{cc}
1\times1+ 0\times0 +0\times2 & 1\times2+ 0\times1 +0\times7 & 1\times1+ 0\times1 +0\times9 \\
0\times1+ 1\times0 +0\times2 & 0\times2+ 1\times1 +0\times7 & 0\times1+ 1\times1 +0\times9 \\
-2\times1+0\times0 +1\times2 &-2\times2+ 0\times1 +1\times7 & -2\times1+ 0\times1 +1\times9 \\
\end{array}
\right)
=
\left(
\begin{array}{rr}
1 & 2 & 1 \\
0 & 1 & 1 \\
0 & 3 & 7 \\
\end{array}
\right)
Die für diese Löschung verwendete Matrix ist die Einheitsmatrix $ I $ plus der Multiplikator $ l_ {31} = -2 $, der die Umkehrung der positiven und negativen Elemente des zu löschenden Elements darstellt und als $ E_ {31} $ geschrieben ist. das ist
E_{31}A=
\left(
\begin{array}{cc}
1 & 2 & 1 \\
0 & 1 & 1 \\
0 & 3 & 7 \\
\end{array}
\right)
Kann geschrieben werden.
Als nächstes möchte ich das Element $ 3 $ auf der rechten Seite löschen. Multiplizieren Sie daher $ E_ {32} $ mit $ l_ {32} = -3 $ von links.
\left(
\begin{array}{cc}
1 & 0 & 0 \\
0 & 1 & 0 \\
0 & -3 & 1 \\
\end{array}
\right)
\left(
\begin{array}{cc}
1 & 2 & 1 \\
0 & 1 & 1 \\
0 & 3 & 7 \\
\end{array}
\right)
=
\left(
\begin{array}{cc}
1\times1+ 0 \times0+0\times0 & 1\times2+ 0\times1 +0\times3 & 1\times1+ 0\times1 +0\times7 \\
0\times1+ 1 \times0+0\times0 & 0\times2+ 1\times1 +0\times3 & 0\times1+ 0\times1 +0\times7 \\
0\times1+(-3)\times0+1\times0&0\times2+(-3)\times1+1\times3 & 0\times1+(-3)\times1+1\times7 \\
\end{array}
\right)
=
\left(
\begin{array}{rr}
1 & 2 & 1 \\
0 & 1 & 1 \\
0 & 0 & 4 \\
\end{array}
\right)
das ist
E_{32}
\left(
\begin{array}{cc}
1 & 2 & 1 \\
0 & 1 & 1 \\
0 & 3 & 7 \\
\end{array}
\right)
=
\left(
\begin{array}{cc}
1 & 2 & 1 \\
0 & 1 & 1 \\
0 & 0 & 4 \\
\end{array}
\right)
=U
Wird sein. Ebenfalls
E_{31}A=
\left(
\begin{array}{cc}
1 & 2 & 1 \\
0 & 1 & 1 \\
0 & 3 & 7 \\
\end{array}
\right)
Von
E_{32}
\left(
\begin{array}{cc}
1 & 2 & 1 \\
0 & 1 & 1 \\
0 & 3 & 7 \\
\end{array}
\right)
=E_{32}E_{31}A=U
Anruf. Dies ergibt eine obere Dreiecksmatrix mit Drehpunkten.
Multiplizieren Sie beide Seiten mit $ E_ {32} ^ {-1} $
E_{32}^{-1}E_{32}E_{31}A=E_{32}^{-1}U
E_{32}^{-1}E_{32}E_{31}A=IE_{31}A=E_{31}A=E_{32}^{-1}U
das ist
E_{31}A=E_{32}^{-1}U
Wenn Sie beide Seiten mit $ E_ {31} ^ {-1} $ multiplizieren
E_{31}^{-1}E_{31}A=E_{31}^{-1}E_{32}^{-1}U
das ist
A=E_{31}^{-1}E_{32}^{-1}U
Rufen Sie auch an.
Als nächstes finden Sie $ E_ {31} ^ {-1} $ und $ E_ {32} ^ {-1} $. Bei der Gauß-Jordan-Methode wird die Matrix, für die die inverse Matrix erhalten werden soll, in die ersten 3 Zeilen und 3 Spalten geschrieben, und dann wird eine rechteckige Matrix, die aus 3 Zeilen und 3 Spalten besteht, durch Eliminieren erzeugt.
[E_{31} e_1 e_2 e_3]=
\left(
\begin{array}{cc}
1 & 0 & 0 &1&0&0\\
0 & 1 & 0 &0&1&0\\
-2 & 0 & 1&0&0&1 \\
\end{array}
\right)
\rightarrow
\left(
\begin{array}{cc}
1 & 0 & 0 &1&0&0\\
0 & 1 & 0 &0&1&0\\
0 & 0 & 1&2&0&1 \\
\end{array}
\right)
Ich werde rechnen.
E_{31}^{-1}=
\left(
\begin{array}{cc}
1&0&0\\
0&1&0\\
2&0&1 \\
\end{array}
\right)
wurde bekommen. Ebenfalls,
[E_{32} e_1 e_2 e_3]=
\left(
\begin{array}{cc}
1 & 0 & 0 &1&0&0\\
0 & 1 & 0 &0&1&0\\
0 & -3 & 1&0&0&1 \\
\end{array}
\right)
\rightarrow
\left(
\begin{array}{cc}
1 & 0 & 0 &1&0&0\\
0 & 1 & 0 &0&1&0\\
0 & 0 & 1&0&3&1 \\
\end{array}
\right)
Von
E_{32}^{-1}=
\left(
\begin{array}{cc}
1&0&0\\
0&1&0\\
0&3&1 \\
\end{array}
\right)
Wird erhalten.
Nächster
E_{31}^{-1}E_{32}^{-1}=
\left(
\begin{array}{cc}
1&0&0\\
0&1&0\\
2&0&1 \\
\end{array}
\right)
\left(
\begin{array}{cc}
1&0&0\\
0&1&0\\
0&3&1 \\
\end{array}
\right)
=
\left(
\begin{array}{cc}
1&0&0\\
0&1&0\\
2&3&1 \\
\end{array}
\right)
Weil dies eine untere Dreiecksmatrix ist
deshalb
A=LU
=
\left(
\begin{array}{cc}
1&0&0\\
0&1&0\\
2&3&1 \\
\end{array}
\right)
\left(
\begin{array}{cc}
1 & 2 & 1 \\
0 & 1 & 1 \\
0 & 0 & 4 \\
\end{array}
\right)
Die Demontage ist abgeschlossen.
Konvertieren Sie eine obere Dreiecksmatrix mit Drehpunkten mithilfe einer Diagonalmatrix in eine obere Dreiecksmatrix ohne Drehpunkte.
A=LU
=
\left(
\begin{array}{cc}
1&0&0\\
0&1&0\\
2&3&1 \\
\end{array}
\right)
\left(
\begin{array}{cc}
1 & 2 & 1 \\
0 & 1 & 1 \\
0 & 0 & 4 \\
\end{array}
\right)
Verwendung der Diagonalmatrix $ D $
A
=
\left(
\begin{array}{cc}
1&0&0\\
0&1&0\\
2&3&1 \\
\end{array}
\right)
\left(
\begin{array}{cc}
1 & 0 & 0 \\
0 & 1 & 0 \\
0 & 0 & 4 \\
\end{array}
\right)
\left(
\begin{array}{cc}
1 & 2 & 1 \\
0 & 1 & 1 \\
0 & 0 & 1 \\
\end{array}
\right)
= LDU_u = LDU
Kann umgeschrieben werden als.
Bestätigen Sie, dass $ A = LDU = LDL ^ {T} $ ist, wenn $ A $ eine symmetrische Matrix ist.
A=\left(
\begin{array}{rrr}
1 & -1 & 2 \\
-1 & 2 & -1 \\
2 & -1 & 1 \\
\end{array}
\right)
Beseitigen Sie dies mit einer Matrix, um eine schwenkbare obere Dreiecksmatrix zu erstellen.
E_{32}E_{31}E_{21}A=\left(
\begin{array}{rrr}
1 & -1 & 2 \\
0& 1 & 1 \\
0 & 0 & -4 \\
\end{array}
\right)
das ist
U=DU_u=
\left(
\begin{array}{rrr}
1 & 0 & 0 \\
0& 1 & 0 \\
0 & 0 & -4 \\
\end{array}
\right)
\left(
\begin{array}{rrr}
1 & -1 & 2 \\
0& 1 & 1 \\
0 & 0 & 1 \\
\end{array}
\right)
Kann zerlegt werden in.
Auch die untere Dreiecksmatrix
E_{32}^{-1}E_{31}^{-1}E_{21}^{-1}=\left(
\begin{array}{rrr}
1 & 0 & 0 \\
-1& 1 & 0 \\
2 & 1 & 1 \\
\end{array}
\right)
= U_u^{T}
Kann bestätigt werden.
Überprüfen Sie das obige Verfahren mit numpy und scipy.
import numpy as np
from scipy.linalg import inv
A = np.array([[1, 2, 1], [0, 1, 1], [2, 7, 9]])
E31=np.array([[1, 0, 0], [0, 1, 0], [-2, 0, 1]])
E32=np.array([[1, 0, 0], [0, 1, 0], [0, -3, 1]])
U=E32@E31@A
L=inv(E32)@inv(E31)
print("U:\n{}\n".format(U))
print("L:\n{}\n".format(L))
print("A:\n{}\n".format(L@U))
UU=np.triu(U,1)+np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1]])
D=np.diag(U)
D=np.diag(D)
print("UU:\n{}\n".format(UU))
print("D:\n{}\n".format(D))
AA=L@D@(UU)
print("A:\n{}\n".format(AA))
U: [[1 2 1] [0 1 1] [0 0 4]]
L: [[1. 0. 0.] [0. 1. 0.] [2. 3. 1.]]
A: [[1. 2. 1.] [0. 1. 1.] [2. 7. 9.]]
UU: [[1 2 1] [0 1 1] [0 0 1]]
D: [[1 0 0] [0 1 0] [0 0 4]]
A: [[1. 2. 1.] [0. 1. 1.] [2. 7. 9.]]
Ich konnte dies bestätigen.
Als nächstes überprüfen wir die symmetrische Matrix.
from scipy.linalg import inv
A = np.array([[1, -1, 2], [-1, 2, -1], [2, -1, 1]])
print("A:\n{}\n".format(A))
E21=np.array([[1, 0, 0], [1, 1, 0], [0, 0, 1]])
E31=np.array([[1, 0, 0], [0, 1, 0], [-2, 0, 1]])
E32=np.array([[1, 0, 0], [0, 1, 0], [0, -1, 1]])
U=E32@E31@E21@A
L=inv(E21)@inv(E31)@inv(E32)
print("U:\n{}\n".format(U))
print("L:\n{}\n".format(L))
print("A:\n{}\n".format(L@U))
UU=np.triu(U,1)+np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1]])
D=np.diag(U)
D=np.diag(D)
print("Uu:\n{}\n".format(UU))
print("D:\n{}\n".format(D))
AA=L@D@(UU)
print("LDUu:\n{}\n".format(AA))
A: [[ 1 -1 2] [-1 2 -1] [ 2 -1 1]]
U: [[ 1 -1 2] [ 0 1 1] [ 0 0 -4]]
L: [[ 1. 0. 0.] [-1. 1. 0.] [ 2. 1. 1.]]
A: [[ 1. -1. 2.] [-1. 2. -1.] [ 2. -1. 1.]]
Uu: [[ 1 -1 2] [ 0 1 1] [ 0 0 1]]
D: [[ 1 0 0] [ 0 1 0] [ 0 0 -4]]
LDUu: [[ 1. -1. 2.] [-1. 2. -1.] [ 2. -1. 1.]]
Ich konnte dies bestätigen.
Als nächstes zerlegen wir mit der lu-Funktion und der lul-Funktion von scipy. Beachten Sie, dass der Drehpunkt an der unteren Dreiecksmatrix angebracht sein kann. Darüber hinaus ist ersichtlich, dass die LU-Zersetzung nicht eindeutig bestimmt ist.
scipy.linalg.lu(a, permute_l=False, overwrite_a=False, check_finite=True)
Berechnen Sie die Pivot-LU-Zerlegung der Matrix.
Demontage
A = P L U
P ist die Substitutionsmatrix, Das diagonale Element von L ist 1.
import numpy as np
from scipy.linalg import lu
#np.random.seed(10)
#Generieren Sie eine Matrix mit zufälligen Elementen
#A = np.random.randint(1, 5, (5, 5))
A = np.array([[1, 2, 1], [0, 1, 1], [2, 7, 9]])
# PA=LU-Zersetzung
P, L, U = lu(A)
print("A:\n{}\n".format(A))
print("P:\n{}\n".format(P))
print("L:\n{}\n".format(L))
print("U:\n{}\n".format(U))
print("PLU:\n{}".format(P@L@U))
A: [[1 2 1] [0 1 1] [2 7 9]]
P: [[0. 1. 0.] [0. 0. 1.] [1. 0. 0.]]
L: [[ 1. 0. 0. ] [ 0.5 1. 0. ] [ 0. -0.66666667 1. ]]
U: [[ 2. 7. 9. ] [ 0. -1.5 -3.5 ] [ 0. 0. -1.33333333]]
PLU: [[1. 2. 1.] [0. 1. 1.] [2. 7. 9.]]
scipy.linalg.ldl(A, lower=True, hermitian=True, overwrite_a=False, check_finite=True) Berechnen Sie die LDLt- oder Bunch-Kaufman-Zerlegung einer symmetrischen / Hermit-Matrix.
Diese Funktion gibt eine Blockdiagonalmatrix D zurück, die aus Blöcken von bis zu 2 × 2 und einer unteren Dreiecksmatrix L besteht, die die Zerlegung A = L D L ^ H oder A = L D L ^ T enthält und möglicherweise eine Substitution erfordert. Wenn niedriger Falsch ist, wird die obere Dreiecksmatrix (die möglicherweise ersetzt werden muss) als Rückgabewert zurückgegeben.
Sie können die Substitutionsmatrix verwenden, um den Rückgabewert zu triangulieren, indem Sie einfach die Zeilen mischen. Dies entspricht der Multiplikation mit der Substitutionsmatrix P.dot (lu), wobei P die Substitutionsmatrix I [:, perm] ist.
from scipy.linalg import ldl
A = np.array([[1, -1, 2], [-1, 2, -1], [2, -1, 1]])
lu, d, perm = ldl(A)
print("lu:\n{}\n".format(lu[perm,:]))
print("d:\n{}\n".format(d))
print("lu.t:\n{}\n".format(lu[perm,:].T))
print("A:\n{}\n".format(lu.dot(d).dot(lu.T)))
lu: [[ 1. 0. 0. ] [ 0. 1. 0. ] [-0.33333333 -0.33333333 1. ]]
d: [[1. 2. 0. ] [2. 1. 0. ] [0. 0. 1.33333333]]
lu.t: [[ 1. 0. -0.33333333] [ 0. 1. -0.33333333] [ 0. 0. 1. ]]
A: [[ 1. -1. 2.] [-1. 2. -1.] [ 2. -1. 1.]]
Recommended Posts