Einführung in die lineare Algebra mit Python: A = LU-Zerlegung

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.


  1. November Online-Lernsitzung zur linearen Algebra Anfänger begrüßen die Einführung in die 19. lineare Algebra G Strang

halten. Bitte tritt uns bei.


A = LU-Löschung und Demontage

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.

Erfassung der oberen Dreiecksmatrix mit Drehpunkten auf diagonalen Elementen durch Eliminierung

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.

Löschen mit einer Matrix

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.

Ausdruck mit der inversen Matrix

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.

Erfassung der inversen Matrix nach der Gauß-Jordan-Methode

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.

Holen Sie sich die untere Dreiecksmatrix

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.

Zerlegung in eine dreieckige Matrix

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.

Beispiel einer symmetrischen Matrix

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}
A=LDL^T

Kann bestätigt werden.

Bestätigung durch sciPy und numpy

Ü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.

Verwendung von lu, lul-Funktionen

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

Einführung in die lineare Algebra mit Python: A = LU-Zerlegung
Einführung in Vektoren: Lineare Algebra in Python <1>
LU-Zerlegung in Python
[Einführung in Python] Wie verwende ich eine Klasse in Python?
Echte Werte und Eigenvektoren: Lineare Algebra in Python <7>
Python Bit Arithmetic Super Einführung
[Einführung in Python] So geben Sie eine Zeichenfolge in einer Print-Anweisung aus
[Einführung in Python] Wie verwende ich den Operator in in der for-Anweisung?
Wie bekomme ich Stacktrace in Python?
Lineare Unabhängigkeit und Basis: Lineare Algebra in Python <6>
Einführung in die Überprüfung der Wirksamkeit Kapitel 1 in Python geschrieben
Berechnen wir das statistische Problem mit Python
So löschen Sie einen Taple in einer Liste (Python)
Einbetten von Variablen in Python-Strings
Einführung in die Überprüfung der Wirksamkeit Kapitel 3 in Python geschrieben
tse - Einführung in den Text Stream Editor in Python
Ich möchte mit Python ein Fenster erstellen
So erstellen Sie eine JSON-Datei in Python
Geschrieben "Einführung in die Effektüberprüfung" in Python
Eine clevere Möglichkeit zur Zeitverarbeitung mit Python
[Einführung in Python3, Tag 23] Kapitel 12 Werden Sie Paisonista (12.1 bis 12.6)
So fügen Sie Python ein Modul hinzu, das Sie in Julialang eingefügt haben
So benachrichtigen Sie Discord-Kanäle in Python
Einführung in das Generalized Linear Model (GLM) von Python
[Python] Wie zeichnet man mit Matplotlib ein Histogramm?
Einheitsmatrix und inverse Matrix: Lineare Algebra in Python <4>
Inneres Produkt und Vektor: Lineare Algebra in Python <2>
Matrixberechnung und lineare Gleichungen: Lineare Algebra in Python <3>
Einführung in die Überprüfung der Wirksamkeit Kapitel 2 in Python geschrieben
Einführung in die Python-Sprache
Einführung in OpenCV (Python) - (2)
Lineare Suche in Python
Analysieren Sie eine JSON-Zeichenfolge, die in eine Datei in Python geschrieben wurde
Ich möchte Timeout einfach in Python implementieren
Versuchen Sie, ein Python-Modul in C-Sprache zu erstellen
Ich möchte in Python schreiben! (2) Schreiben wir einen Test
Erstellen Sie ein Plug-In, das Python Doctest auf Vim ausführt (2)
Ich habe versucht, einen Pseudo-Pachislot in Python zu implementieren
Ein Memorandum zum Ausführen eines Python-Skripts in einer Bat-Datei
[Einführung in Python] Hochgeschwindigkeits-Einführung in Python für vielbeschäftigte C ++ - Programmierer
Ich möchte eine Datei mit Python zufällig testen
Ich möchte mit einem Roboter in Python arbeiten.
Beachten Sie beim Initialisieren einer Liste in Python
[Python] Erstellt eine Methode zum Konvertieren von Radix in 1 Sekunde
So führen Sie einen Befehl mit einem Unterprozess in Python aus
Veröffentlichen / Hochladen einer in Python erstellten Bibliothek in PyPI
[Einführung in die Elementzerlegung] Lassen Sie uns Zeitreihenanalysemethoden in R und Python arrange anordnen
Ich kann nicht schlafen, bis ich einen Server erstellt habe !! (Einführung in den Python-Server an einem Tag)
Einführung in Python Django (2) Win
Erstellen Sie eine Funktion in Python
So löschen Sie stdout in Python
Erstellen Sie ein Wörterbuch in Python
Ein Weg zum mittleren Python
Eine super Einführung in Linux
Melden Sie sich auf der Website in Python an
Einführung in die serielle Kommunikation [Python]
Erstellen Sie ein Lesezeichen in Python
[Einführung in Python] <Liste> [Bearbeiten: 22.02.2020]