[PYTHON] Lineare Algebra zur Programmierung Kapitel 4 (eindeutige Werte, Eigenvektoren)

Wann wird es nützlich sein

Ich möchte herausfinden, ob das Self-Return-Modell außer Kontrolle gerät!

Was ist ein Self-Return-Modell?

Zum Beispiel ist das heutige $ ξ (t) $ das gestrige $ ξ (t-1) $, das $ ξ (t-2) $ des Vaters und der Tag davor $ ξ (t-3) $ und heute Angenommen, Sie entscheiden aus $ u (t) $:

ξ(t)=-0.5ξ(t-1)+0.34ξ(t-2)+0.08ξ(t-3)+2u(t)

Dies als Matrix ausdrücken,

x(t)=
\begin{pmatrix}
-0.5&0.34&0.08\\
1&0&0\\
0&1&0
\end{pmatrix} \times
x(t-1)

Es wird sein. Seitdem wurde dies verallgemeinert

x(t)=Ax(t-1)

Griffe.

Für eine Dimension

x(t)=7x(t-1)

Dies wird jedes Mal mit 7 multipliziert, wenn $ t $ wächst

x(t)=7^tx(0)

Wenn dann $ t → ∞ $ ist, gerät es außer Kontrolle, weil es $ 7 ^ t → ∞ $ ist. Wenn der Koeffizient dagegen $ 0,2 $ beträgt, gibt es kein Durchgehen. Das ist einfach, nicht wahr?

Für diagonale Matrix

x(t)=
\begin{pmatrix}
5&0&0\\
0&-3&0\\
0&0&0.8
\end{pmatrix} \times
x(t-1)

Im Fall von muss die Leistung der Diagonalmatrix nur die Leistung der Komponente sein, wie sie ist.

x(t)=
\begin{pmatrix}
5&0&0\\
0&-3&0\\
0&0&0.8
\end{pmatrix}^t
x(0)

Kann geschrieben werden.

Verallgemeinerung

Wenn die Matrix keine Diagonalmatrix ist, wird sie zwangsweise in eine Diagonalmatrix umgewandelt. Bringen Sie eine reguläre Matrix $ P $ in die ursprüngliche Variable $ x (t) $

x(t)=Py(t)

Lassen Sie uns darüber nachdenken, wie Sie mit in eine andere Variable konvertieren können. Wie wird zu diesem Zeitpunkt $ x (t) = Ax (t-1) $ konvertiert?

Erstens ist $ x (t) = Py (t) $

y(t)=P^{-1}x(t)=P^{-1}Ax(t-1)\\
      =P^{-1}A(Py(t-1))=(P^{-1}AP)y(t-1)

Wenn Sie $ Λ = P ^ {-1} AP $ setzen,

y(t)=Λy(t-1)

Kann platziert werden. Wenn dieses $ Λ $ eine diagonale Matrix ist,

y(t)=Λ^ty(0)

Sie können $ y (t) $ mit leicht finden

x(t)=Py(t)=PΛty(0)=PΛ^tP^{-1}x(0)

Ich war froh, auch x zu finden.

Diese Prozedur "Bringen eines bequemen $ P $ und Machen von $ P ^ {-1} AP $ zu einer Diagonalmatrix" wird Diagonalisierung genannt.

Was ich machen will; was ich vorhabe zu tun

P^{-1}AP≡Λ=diag(λ_1,...,λ_n)

Ist $ P $ wie zu finden. Im Allgemeinen für eine quadratische Matrix $ A $

Ap=λp\\
p≠o

Die Zahl $ λ $ und der Vektor $ p $, die die Bedingungen erfüllen, werden als Eigenwerte bzw. Eigenvektoren bezeichnet.

Berechnen Sie Eigenwerte und Eigenvektoren mit Python

Sie können einfach berechnen, indem Sie die Funktion von Numpy voll ausnutzen. Berechnen wir mit der folgenden Matrix.

A=
\begin{pmatrix}
5&3&4\\
6&8&-8\\
6&9&-9
\end{pmatrix}
import numpy as np

def get_eigenpairs(arr):
    #np.linalg.eig gibt im ersten Argument einen eindeutigen Wert und im zweiten Argument einen eindeutigen Vektor aus
    w, v = np.linalg.eig(arr)
    eigenpairs = []
    
    #Weil v auf 1 standardisiert ist. Ich bin mir nicht sicher, ob dies der Fall ist.
    #Daher wird der numerische Wert wiederhergestellt, indem in jeder Spalte durch den Mindestwert ohne 0 dividiert wird.
    for i, val in enumerate(w):
        vec = v[:, i] / np.min(np.abs(v[:, i][v[:, i] != 0]))
        eigenpairs.append((val, vec))
    eigenpairs.sort(key=lambda x:x[0])
    return eigenpairs

A = np.array([[5,3,-4],[6,8,-8],[6,9,-9]])

get_eigenpairs(A)
#array([[-1.0, array([1., 2., 3.])],
#       [2.0, array([-1., -3., -3.])],
#       [3.0, array([1., 2., 2.])]], dtype=object)

Ich habe 3 Eigenvektoren. Diese entsprechen eindeutigen Werten $ -1, 2, 3 $. Ordnen Sie also drei Eigenvektoren an

P=
\begin{pmatrix}
1&-1&1\\
2&-3&2\\
3&-3&2
\end{pmatrix}

Überprüfen wir, ob $ P ^ {-1} AP $ eine diagonale Matrix ist.

P = np.empty((3,3))

#Speichern Sie 3 Eigenvektoren in einer 3x3-Matrix
for i,val in enumerate(get_eigenpairs(a)):
    P[i] = val[1]

np.rint(np.dot(np.dot(np.linalg.inv(P.T),a),P.T))
#array([[-1.,  0.,  0.],
#       [ 0.,  2., -0.],
#       [ 0.,  0.,  3.]])

Es wurde bestätigt, dass $ P ^ {-1} AP = diag (-1,2,3) $ erfolgreich erhalten wurde. Jetzt können Sie sich leicht über das Durchgehen des Self-Return-Modells informieren.

Recommended Posts

Lineare Algebra zur Programmierung Kapitel 4 (eindeutige Werte, Eigenvektoren)
Echte Werte und Eigenvektoren: Lineare Algebra in Python <7>
Finden Sie den Eigenwert / Eigenvektor
Lineare Programmierung mit PuLP