Führen Sie in Python eine "Diagonalisierung der symmetrischen Matrix A mit der orthogonalen Matrix U" durch (Eigenwertzerlegung).

Wenn A eine symmetrische Matrix ist, dann unter Verwendung der orthogonalen Matrix U,

\mathbf{A} = \mathbf{U} \mathbf{D} \mathbf{U}^T 

Kann diagonalisiert werden (D ist eine Diagonalmatrix). In diesem Moment,

\mathbf{A}^n = \mathbf{U} \mathbf{D}^n \mathbf{U}^T 

Ist erfüllt, so wird die Berechnung von A zur n-ten Potenz sehr einfach.

Dieses Mal habe ich Python-Code erstellt, mit dem die Diagonalisierung leicht berechnet werden kann (eindeutige Wertzerlegung).

func.py


def Eigenvalue_decomp(A):
	#Die symmetrische Matrix A wird unter Verwendung der orthogonalen Matrix U diagonalisiert.
	import numpy as np

	if A.shape[0]!=A.shape[1]: #Gibt einen Fehler zurück, wenn A keine quadratische Matrix ist
		raise Exception("error! A is not square matrix!")

	if (A==A.T).all()==False: #Gibt einen Fehler zurück, wenn A keine symmetrische Matrix ist
		raise Exception("error! A is not symmetric matrix!")

	la, U = np.linalg.eig(A)	# eigen value and eigen vector is resolved.
	U,_=np.linalg.qr(U)			# Gram-Schmidt orthonormalization
	D=np.diag(la)

	return U,D

mit diesem,

In[1]: import func
In[2]: U,D=func.Eigenvalue_decomp(A)

Sie können die orthogonale Matrix U und die diagonale Matrix D zum Diagonalisieren der durch numpy erzeugten symmetrischen Matrix A erhalten.

Prüfung

** Sekundärmatrix **

\mathbf{A}=
\begin{pmatrix}
5.0 & 2.0 \\
2.0 & 7.0 
\end{pmatrix}
In[3]: A=np.array([[5.0,2.0],[2.0,7.0]])
In[4]: U,D=func.Eigenvalue_decomp(A)
In[5]: print U.dot(D.dot(U.T)) #A=U*D*Berechne Ut
[[ 5.  2.]
 [ 2.  7.]]
In[6]: print A.dot(A) #A*Berechnen Sie A.
[[ 29.  24.]
 [ 24.  53.]]
In[7]: print U.dot(D.dot(D.dot(U.T))) #A*A=U*D*D*Berechne Ut
[[ 29.  24.]
 [ 24.  53.]]

** Matrix dritter Ordnung **

\mathbf{A}=
\begin{pmatrix}
1.0 & \sqrt{2.0} & 0 \\
\sqrt{2.0} & 1.0 & \sqrt{2.0}  \\
0 & \sqrt{2.0} & 1.0
\end{pmatrix}
In[8]: A=np.array([[1.0,np.sqrt(2.0),0],[np.sqrt(2.0),1.0,np.sqrt(2.0)],[0,np.sqrt(2.0),1.0]])
In[9]: U,D=func.Eigenvalue_decomp(A)
In[10]: print U.dot(D.dot(U.T)) #A=U*D*Berechne Ut
[[  1.00000000e+00   1.41421356e+00  -3.33066907e-16]
 [  1.41421356e+00   1.00000000e+00   1.41421356e+00]
 [ -3.33066907e-16   1.41421356e+00   1.00000000e+00]]
In[11]: print A.dot(A) #A*Berechnen Sie A.
[[ 3.          2.82842712  2.        ]
 [ 2.82842712  5.          2.82842712]
 [ 2.          2.82842712  3.        ]]
In[12]: print U.dot(D.dot(D.dot(U.T))) #A*A=U*D*D*Berechne Ut
[[ 3.          2.82842712  2.        ]
 [ 2.82842712  5.          2.82842712]
 [ 2.          2.82842712  3.        ]]

** Matrix dritter Ordnung (wenn der Eigenwert mehrere Lösungen enthält) **

\mathbf{A}=
\begin{pmatrix}
0 & -\sqrt{2.0} & \sqrt{2.0} \\
-\sqrt{2.0} & 1.0 & 1.0  \\
\sqrt{2.0} & 1.0 & 1.0
\end{pmatrix}

Wenn diese Matrix A analytisch gelöst wird, enthält der Eigenwert eine Mehrfachlösung (λ = 2).

In[13]: A=np.array([[0,-np.sqrt(2.0),np.sqrt(2.0)],[-np.sqrt(2.0),1.0,1.0],[np.sqrt(2.0),1.0,1.0]])
In[14]: U,D=func.Eigenvalue_decomp(A)
In[15]: print U.dot(D.dot(U.T)) #A=U*D*Berechne Ut
[[ -2.85835307e-16  -1.41421356e+00   1.41421356e+00]
 [ -1.41421356e+00   1.00000000e+00   1.00000000e+00]
 [  1.41421356e+00   1.00000000e+00   1.00000000e+00]]
In[16]: print A.dot(A) #A*Berechnen Sie A.
[[  4.00000000e+00   0.00000000e+00   0.00000000e+00]
 [  0.00000000e+00   4.00000000e+00  -4.44089210e-16]
 [  0.00000000e+00  -4.44089210e-16   4.00000000e+00]]
In[17]: print U.dot(D.dot(D.dot(U.T))) #A*A=U*D*D*Berechne Ut
[[  4.00000000e+00   3.16592776e-16  -5.71585644e-16]
 [  3.16592776e-16   4.00000000e+00  -4.44089210e-16]
 [ -5.71585644e-16  -4.44089210e-16   4.00000000e+00]]

In jedem Fall scheinen U und D korrekt berechnet zu sein.

Ursprünglich [numpy.linalg.matrix_power](http://docs.scipy.org/doc/numpy-1.10.0/reference/generated/numpy.linalg.matrix_power.html "numpy.linalg.matrix_power" in Python numpy Da es eine Funktion namens ") gibt, die die n-te Potenz einer Matrix berechnen kann, verwenden Sie die obige Funktion nicht zum Zweck der" Berechnung der n-ten Potenz einer symmetrischen Matrix ", sondern können die Eigenwertzerlegung einer symmetrischen Matrix verwenden. Ich denke, es ist sehr effektiv, wenn Sie es tun wollen.

Referenz-URL: http://mathtrain.jp/symmetriceigen http://ksmzn.hatenablog.com/entry/2014/02/16/004921 http://takegue.hatenablog.com/entry/2014/07/26/222141 http://docs.scipy.org/doc/numpy-1.10.0/reference/generated/numpy.linalg.matrix_power.html

Recommended Posts

Führen Sie in Python eine "Diagonalisierung der symmetrischen Matrix A mit der orthogonalen Matrix U" durch (Eigenwertzerlegung).
Finden Sie die Eigenwerte einer reellen symmetrischen Matrix in Python
Ein Memo, dass ich eine Grundfunktion in Python mit Wiederholung geschrieben habe
Zeichnen Sie eine Streudiagrammmatrix mit Python
Übung, dies in Python zu verwenden (schlecht)
Scraping von Websites mit JavaScript in Python
Zeichnen Sie mit graphviz eine Baumstruktur in Python 3
[Python] [Word] [python-docx] Versuchen Sie, mit python-docx eine Vorlage für einen Wortsatz in Python zu erstellen
Extrahieren Sie Elemente (mithilfe einer Liste von Indizes) wie NumPy aus einer Python-Liste / einem Python
Zeichnen Sie in Python ein Diagramm einer quadratischen Funktion
Erstellen Sie eine GIF-Datei mit Pillow in Python
Kopieren Sie die Liste in Python
Umschreiben von Elementen in einer Listenschleife (Python)
Führen Sie eine Entitätsanalyse mit spaCy / GiNZA in Python durch
Anzeigen von Arzneimittelbewertungen mithilfe von Listen in Python
Machen Sie mit Python eine Joyplot-ähnliche Handlung von R.
Ausgabe in Form eines Python-Arrays
Lassen Sie uns einen Teil des maschinellen Lernens mit Python berühren
[Python] Finden Sie die Translokationsmatrix in Einschlussnotation
Erstellen Sie eine MIDI-Datei in Python mit pretty_midi
Aufgezeichnete Umgebung für die Datenanalyse mit Python
Zusammenfassung der Excel-Operationen mit OpenPyXL in Python
[Python] Implementierung von Clustering mit einem gemischten Gaußschen Modell
Erstellen Sie mit Selenium einen Datenerfassungsbot in Python
Grundlagen des Eingabe- / Ausgabebildschirms mit tkinter in python3
Schneiden Sie einen Teil der Zeichenfolge mit einem Python-Slice aus
Eine Code-Sammlung, die häufig in persönlichem Python verwendet wird
Einführung in die lineare Algebra mit Python: A = LU-Zerlegung
Gruppieren Sie nach aufeinanderfolgenden Elementen einer Liste in Python
Zeigen Sie ein Histogramm der Bildhelligkeitswerte in Python an
So führen Sie einen Befehl mit einem Unterprozess in Python aus
Ein Memorandum über die Umsetzung von Empfehlungen in Python
Ich habe versucht, Python (3) anstelle eines Funktionsrechners zu verwenden
Ssh-Verbindungsnotiz mit ProxyCommand von ssh_config in Python
So erstellen Sie eine Instanz einer bestimmten Klasse aus dict mit __new__ () in Python
LU-Zerlegung in Python
Finden Sie die scheinbare Breite einer Zeichenfolge in Python heraus
Erstellen Sie eine Multiplikationstabelle für jedes Element in einer Tabelle (Python).
Ich habe einen schnellen Feed-Reader mit Feedparser in Python erstellt
Holen Sie sich die Anzahl der spezifischen Elemente in der Python-Liste
So entwickeln Sie in einer virtuellen Python-Umgebung [Memo]
[Hinweis] Import von Dateien in das übergeordnete Verzeichnis in Python
So geben Sie char * in einer Rückruffunktion mit ctypes in Python zurück
Versuchen Sie, ein neuronales Netzwerk in Python aufzubauen, ohne eine Bibliothek zu verwenden
So erhalten Sie eine Liste der integrierten Ausnahmen für Python
Ich habe eine Stoppuhr mit tkinter mit Python gemacht
Versuchen Sie, eine in Python geschriebene Funktion mit Fn Project auszuführen
Eine Reihe von Skriptdateien, die Wordcloud mit Python3 ausführen
Ruft den Index jedes Elements der Verwirrungsmatrix in Python ab