[Wissenschaftlich-technische Berechnung nach Python] Numerische Lösung des Eigenwertproblems der Matrix durch Potenzmultiplikation, numerische lineare Algebra

Einführung

In Wissenschaft und Technik lösen wir häufig Eigenwertprobleme in der Quantenmechanik und in Oszillatorsystemen.

Power-Methode ist ein Standard-Eigenwertproblem.

A\mathbf{u} = \lambda \mathbf{u}

Es ist einer der Algorithmen, den maximalen Eigenwert (dominanten Eigenwert) von zu finden. ** ** ** Wenn Sie das Einführungsbuch in diesem Bereich öffnen, werden Sie es häufig zuerst sehen.

** Es ist ein sehr lehrreicher Inhalt zum Erlernen der rudimentären numerischen Lösung des Eigenwertproblems. In diesem Artikel werden wir diese Methode betrachten. ** ** **

Diese Methode ist sehr einfach.

Berechnungsverfahren und Punkte

  1. Stellen Sie einen geeigneten anfänglichen geschätzten Eigenvektor $ u_0 $ ein.
  2. Multiplizieren Sie $ u_0 $ mit A ($ AAAAAA ... \ mathbf {u_0} = A ^ k \ mathbf {u_0} \ (k-> ∞) $.
  3. Dann konvergiert der Richtungsvektor gegen einen konstanten Vektor $ \ mathbf {u '} $.
  4. ** In vielen Fällen ist $ \ mathbf {u '} $ der Eigenvektor, der dem Eigenwert mit dem größten Absolutwert entspricht! ** ** **
  5. u'Wenn ein Eigenvektor ist, ist der entsprechende Eigenwert\lambdaIst\mathbf{u^T}A\mathbf{u}/(|u|^2)Kann zur Verfügung gestellt werden.

Die Hauptsache ist also, das ** A zu multiplizieren, um die Konvergenz des Richtungsvektors zu überprüfen. ** ** ** Dann liegt der Ursprung des Namens "Potenzmethode" in der Methode zur Bewertung der Leistung der Koeffizientenmatrix A, wie in 2 oben zu sehen ist.

Wenn Sie über die mathematische Basis von 4 oben besorgt sind, lesen Sie bitte den Anhang dieses Artikels.

Zusätzlich ist die Potenzmethode eine Methode zum Ermitteln des maximalen Eigenwerts des Absolutwerts von A. ** Mit etwas Einfallsreichtum ist es möglich, den Eigenwert mit dem kleinsten Absolutwert zu finden, den Eigenwert, der der gegebenen komplexen Zahl $ z $ am nächsten kommt, den zweiten Eigenwert und so weiter. ** Ich habe vor, einen Artikel zu veröffentlichen.


Inhalt

Lösen Sie ein einfaches Eigenwertproblem, das die Leistungsmultiplikationsmethode anwendet. Stellen Sie jedoch sicher, dass der Eigenwert mit dem maximalen Absolutwert und der entsprechende Eigenvektor erhalten werden.

Als $ A $ von $ A \ mathbf {u} = \ lambda \ mathbf {u} $

A=
\left[
\begin{matrix}
1 & 2 \\
3 & 4 
\end{matrix}
\right]

Nachdenken über.

Die genaue Lösung für den größten absoluten Eigenwert ist $ \ frac {5+ \ sqrt {33}} {2} = 5.372281323 ... $.


Code

Als Konvergenzbeurteilungsbedingung Absoluter Wert der Änderung von $ \ lambda $ in sich wiederholenden Schritten $ k $ und $ k + 1 $ \frac{|\lambda_{k+1}-\lambda_k|}{| \lambda_k|} \lt \epsilon=0.0001Wiederholen Sie die Berechnung bis.

"""
Matrixeigenwertproblem:Power-Methode:
"""

import numpy as np

A=np.array([[1,2],[3,4]])

x0 = np.array([1,0]); x1 = np.array([0,1])
u = 1.0*x0+2.0*x1 #Der anfängliche Eigenvektor. Angemessen.

rel_eps = 0.0001 #Konvergenzbedingung des Eigenwerts
#Krylov-Säulengenerierung

rel_delta_u=100.0
while rel_delta_u >= rel_eps :  #Hauptschleife
    uu = u/np.linalg.norm(u) #Normalisierung(Setzen Sie die Norm auf 1)
    print("u=",uu)
    
    u = np.dot(A,uu.T)

    eigen_value=np.dot(uu,u)/(np.dot(uu,uu.T))

    print("eigen_value=",eigen_value)
    
    delta_u_vec = uu-u/np.linalg.norm(u)
    abs_delta_u_value= np.linalg.norm(delta_u_vec)
    rel_delta_u=abs_delta_u_value/np.abs(eigen_value) #Relative Änderung des Eigenwerts in Bezug auf wiederholte Schritte
    print("rel_delta_u_vec = ",rel_delta_u)


Ergebnis



u= [ 0.41612395  0.9093079 ]
eigen_value= 5.37244655582
rel_delta_u_vec =  3.29180183204e-05

Sie können sehen, dass es sehr gut mit der exakten Lösung 5.372281323 übereinstimmt ...


Verweise

Die folgenden Bücher waren beim Schreiben dieses Artikels hilfreich. [1] ist eine einfache Beschreibung und leicht zu verstehen. [2] ist eine Zusammenfassung der Lösung von Eigenwertproblemen mit numpy und scipy.

[1] Gilbert Strang, ["World Standard MIT Lehrbuch Strang: Einführung in die lineare Algebra"](https://www.amazon.co.jp/%E4%B8%96%E7%95%8C%E6%A8%99 % E6% BA% 96MIT% E6% 95% 99% E7% A7% 91% E6% 9B% B8-% E3% 82% B9% E3% 83% 88% E3% 83% A9% E3% 83% B3% E3% 82% B0-% E7% B7% 9A% E5% BD% A2% E4% BB% A3% E6% 95% B0% E3% 82% A4% E3% 83% B3% E3% 83% 88% E3 % 83% AD% E3% 83% 80% E3% 82% AF% E3% 82% B7% E3% 83% A7% E3% 83% B3-% E3% 82% AE% E3% 83% AB% E3% 83% 90% E3% 83% BC% E3% 83% 88 / dp / 4764904055 / ref = pd_lpo_sbs_14_t_0? _ Encoding = UTF8 & psc = 1 & refRID = 9817PCQXDR5497M5GPS2), Modern Science, 2015.

[2] [[Wissenschaftliche / technische Berechnung durch Python] Lösen (verallgemeinerter) Eigenwertprobleme mit numpy / scipy, mit Bibliothek] (http://qiita.com/sci_Haru/items/034c6f74d415c1c10d0b)


Nachtrag

Die Leistungsmultiplikation ist ein Standardeigenwertproblem

A\mathbf{u} = \lambda \mathbf{u}

Im

Ausgehend vom Anfangsvektor $ u_0 $

u_i = Au_{i-1}, (i=1,2,...)

Dies ist eine Methode, um den Eigenwert / Eigenvektor mit dem maximalen Absolutwert zu finden. (Dieses $ u_0, Au_0, A ^ 2u_0, A ^ 3u_0 $, ... ist [Kurilov-Spalte](https://ja.wikipedia.org/wiki/%E3%82%AF%E3%83%AA% Es heißt E3% 83% AD% E3% 83% 95% E9% 83% A8% E5% 88% 86% E7% A9% BA% E9% 96% 93))

Nun die Eigenwertgleichung $Au_i = \lambda_i u_i$

In ** haben Eigenwerte keine Regression **, dh $\lambda_i \neq \lambda_j \ (i \neq j)$

Annehmen. Auch in Bezug auf die Größenordnung der Eigenwerte

|\lambda_1| > |\lambda_2|>|\lambda_3|...

Annehmen.|\lambda_1|Ist der maximale Eigenwert des Absolutwerts, und wir wollen ihn durch die Potenzmultiplikationsmethode finden.

Betrachten Sie nun einen geeigneten Vektor $ u_0 $. Angenommen, der Koeffizient $ c_i $ ist fest, so dass $ u_0 $ wie folgt erweitert werden kann.

u_0 = c_1 \mathbf{u_1} + c_2 \mathbf{u_2}+c3 \mathbf{u_3}+...

Wenn $ A ^ k $, das $ A $ sein sollte, darauf angewendet wird,

A^k u_0 = c_1 A^k \mathbf{u_1} + c_2 A^k \mathbf{u_2} + c_3 A^k \mathbf{u_3}+...
= c_1 \lambda_1^k \mathbf{u_1} + c_2 \lambda_2^k \mathbf{u_2} + c_3 \lambda_3^k\mathbf{u_3} +...
=\lambda_1^k (c_1 \mathbf{u_1} + c_2 \lambda_2^k/\lambda_1^k \mathbf{u_2} + c_3 \lambda_3^k/\lambda_1^k\mathbf{u_3}) +...

Es wird sein.

|\lambda_1|Ist der größte Eigenwert, also für eine große Potenzzahl k\lambda_2^k/\lambda_1^kOder\lambda_3^k/\lambda_1^k ...Sollte gegen Null konvergierenist. Mit anderen Worten

(k-> ∞ )A^k u_0 => \lambda_1^k (c_1 \mathbf{u_1} )

Sie können es erwarten.

Durch wiederholtes Anwenden von $ A $ auf den ** anfänglichen Versuchsvektor $ u_0 $ auf diese Weise wird ein Vektor parallel zum Eigenvektor erhalten, der dem Eigenwert mit dem maximalen Absolutwert entspricht. ** ** **

Da der Eigenvektor immer die Unbestimmtheit eines konstanten Vielfachen (beliebiges komplexes numerisches Vielfaches) aufweist (dies bedeutet, dass sich der Eigenwert auch dann nicht ändert, wenn beide Seiten der Eigengleichung mit der komplexen Zahl multipliziert werden), wird diejenige ausgewählt, die dem Zweck entspricht. In den meisten Fällen wird die mit der Norm 1 gewählt.

Der maximale absolute Eigenwert $ \ lambda $ ergibt sich aus der Eigenwertgleichung für ein ausreichend großes $ k $.

\lambda = \frac{u_k^T A u_k}{u_k^T u_k} =\frac{u_k^T u_{k+1}}{u_k^T u_k}

Kann berechnet werden als. Dies ist der [Rayleigh-Quotient](https://ja.wikipedia.org/wiki/%E3%83%AC%E3%82%A4%E3%83%AA%E3%83%BC%E5%95 Es heißt% 86).

Wie oben beschrieben, ist es möglich, den maximalen Absolutwert des Eigenwertproblems und des entsprechenden Eigenvektors zu berechnen.

Hinweis

  1. Bei Verwendung der Power-Methode muss die Bedingung erfüllt sein, dass der eindeutige Wert von $ A $ nicht dupliziert wird. ** Wenn die Eigenwerte zurückgezogen oder geschlossen werden, konvergiert die Lösung nicht oder erfordert zu viele iterative Schritte, um zu konvergieren **. 2.Die reale Matrix ist ein komplexer EigenwertzWenn, seine konjugierte komplexe Zahlz*Ist auch ein einzigartiger Wert. Diese Zeit|z|=|z*|Daher sind die eindeutigen Werte gleich. Wenn sie den maximalen absoluten Wert haben, tritt die obige Situation 1 auf und die Lösung konvergiert nicht.

Recommended Posts

[Wissenschaftlich-technische Berechnung nach Python] Numerische Lösung des Eigenwertproblems der Matrix durch Potenzmultiplikation, numerische lineare Algebra
[Wissenschaftlich-technische Berechnung nach Python] Numerische Lösung des Problems des eindimensionalen harmonischen Oszillators nach der Speed-Berle-Methode
[Wissenschaftlich-technische Berechnung mit Python] Liste der Matrizen, die in Hinpan in der numerischen linearen Algebra vorkommen
[Wissenschaftlich-technische Berechnung mit Python] Summenberechnung, numerische Berechnung
[Wissenschaftlich-technische Berechnung durch Python] Lösung des Randwertproblems gewöhnlicher Differentialgleichungen im Matrixformat, numerische Berechnung
[Wissenschaftlich-technische Berechnung nach Python] Numerische Lösung der zweidimensionalen Laplace-Poisson-Gleichung für die elektrostatische Position nach der Jacobi-Methode, elliptische partielle Differentialgleichung, Randwertproblem
[Wissenschaftlich-technische Berechnung mit Python] Lösen simultaner linearer Gleichungen, numerische Berechnung, Numpy
[Wissenschaftlich-technische Berechnung mit Python] 2D-Random-Walk (Drunken-Walk-Problem), numerische Berechnung
[Wissenschaftlich-technische Berechnung mit Python] Numerische Lösung gewöhnlicher Differentialgleichungen erster Ordnung, Anfangswertproblem, numerische Berechnung
[Wissenschaftlich-technische Berechnung nach Python] Numerische Lösung von 1-dimensionalen und 2-dimensionalen Wellengleichungen nach der FTCS-Methode (explizite Methode), doppelt gekrümmte partielle Differentialgleichungen
[Wissenschaftlich-technische Berechnung mit Python] Inverse Matrixberechnung, numpy
[Wissenschaftlich-technische Berechnung mit Python] Lagrange-Interpolation, numerische Berechnung
[Wissenschaftlich-technische Berechnung mit Python] Berechnung des Matrixprodukts mit @ operator, python3.5 oder höher, numpy
[Wissenschaftlich-technische Berechnung mit Python] Lösen (verallgemeinerter) Eigenwertprobleme mit numpy / scipy mithilfe von Bibliotheken
[Wissenschaftlich-technische Berechnung mit Python] Lösen der gewöhnlichen Differentialgleichung zweiter Ordnung nach der Numerov-Methode, numerische Berechnung
[Wissenschaftlich-technische Berechnung von Python] Numerische Berechnung zur Ermittlung des Ableitungswerts (Differential)
[Wissenschaftlich-technische Berechnung mit Python] Analytische Lösungssympathie zur Lösung von Gleichungen
[Wissenschaftlich-technische Berechnung nach Python] Numerische Lösung der eindimensionalen instationären Wärmeleitungsgleichung nach der Crank-Nicholson-Methode (implizite Methode) und der FTCS-Methode (positive Lösungsmethode), parabolische partielle Differentialgleichung
[Wissenschaftlich-technische Berechnung von Python] Grundlegende Operation des Arrays, numpy
[Wissenschaftlich-technische Berechnung mit Python] Monte-Carlo-Integration, numerische Berechnung, Numpy
[Wissenschaftlich-technische Berechnung nach Python] Numerische Integration, Trapezgesetz / Simpson-Gesetz, numerische Berechnung, scipy
[Wissenschaftlich-technische Berechnung nach Python] Monte-Carlo-Simulation nach der Metropolenmethode der Thermodynamik des 2D-Anstiegsspinsystems
[Wissenschaftlich-technische Berechnung von Python] Anpassung durch nichtlineare Funktion, Zustandsgleichung, scipy
[Wissenschaftlich-technische Berechnung mit Python] Histogramm, Visualisierung, Matplotlib
[Wissenschaftlich-technische Berechnung von Python] Zeichnungsanimation der parabolischen Bewegung mit Locus, Matplotlib
[Wissenschaftlich-technische Berechnung von Python] Zeichnung von 3D-gekrümmter Oberfläche, Oberfläche, Drahtrahmen, Visualisierung, Matplotlib
[Wissenschaftlich-technische Berechnung nach Python] Lösen der eindimensionalen Newton-Gleichung nach der Runge-Kutta-Methode 4. Ordnung
Numerische Berechnung von kompressiblem Fluid nach der Methode des endlichen Volumens
[Wissenschaftlich-technische Berechnung mit Python] Logistisches Diagramm, Visualisierung, Matplotlib
Berechnung der Homographiematrix nach der Methode der kleinsten Quadrate (DLT-Methode)
[Wissenschaftlich-technische Berechnung mit Python] Polarkoordinatendiagramm, Visualisierung, Matplotlib
[Wissenschaftlich-technische Berechnung mit Python] Plot, Visualisierung, Matplotlib von 2D-Daten, die aus einer Datei gelesen wurden
[Wissenschaftlich-technische Berechnung mit Python] Zeichnen, Visualisieren, Matplotlib von 2D-Konturlinien (Farbkonturen) usw.
[Python] Numerische Berechnung der zweidimensionalen Wärmediffusionsgleichung mit der ADI-Methode (implizite Methode mit alternativer Richtung)
[Wissenschaftlich-technische Berechnung nach Python] Lösen der Schledinger-Gleichung im stationären Zustand im dreidimensionalen isotropen Oszillatorpotential nach der Matrixmethode, Randwertproblem, Quantenmechanik
[Wissenschaftlich-technische Berechnung mit Python] Spline-Interpolation dritter Ordnung, scipy
[Numerische Berechnungsmethode, Python] Lösen gewöhnlicher Differentialgleichungen mit der Eular-Methode
[Wissenschaftlich-technische Berechnung durch Python] Liste der Verwendung von (speziellen) Funktionen, die in der Physik unter Verwendung von scipy verwendet werden
[Wissenschaftliche und technische Berechnung von Python] Zeichnung fraktaler Figuren [Shelpinsky-Dreieck, Bernsley-Farn, fraktaler Baum]
Wissenschaftlich-technische Berechnung mit Python] Zeichnen und Visualisieren von 3D-Isoplanes und deren Querschnittsansichten mit Mayavi
[Wissenschaftlich-technische Berechnung mit Python] Beispiel für die Visualisierung von Vektorfeld, elektrostatischem Magnetfeld, Matplotlib
[Wissenschaftlich-technische Berechnung von Python] 1-dimensionale 3D-diskrete Hochgeschwindigkeits-Fourier-Transformation, scipy
Geschichte der Potenznäherung von Python
[Wissenschaftlich-technische Berechnung nach Python] Vergleich der Konvergenzgeschwindigkeiten der SOR-Methode, der Gauß-Seidel-Methode und der Jacobi-Methode für die Laplace-Gleichung, die partielle Differentialgleichung und das Randwertproblem
[Wissenschaftlich-technische Berechnung nach Python] Ableitung analytischer Lösungen für quadratische und kubische Gleichungen, mathematische Formeln, Sympy
[Wissenschaftlich-technische Berechnung mit Python] Lösen gewöhnlicher Differentialgleichungen, mathematischer Formeln, Sympy
[Wissenschaftlich-technische Berechnung von Python] Lösen der eindimensionalen Schrödinger-Gleichung im stationären Zustand durch Schießmethode (1), Potential vom Well-Typ, Quantenmechanik
[Wissenschaftlich-technische Berechnung mit Python] Zeichnen, visualisieren, matplotlib 2D-Daten mit Fehlerleiste
[Wissenschaftlich-technische Berechnung von Python] Lösen der eindimensionalen Schrödinger-Gleichung im stationären Zustand durch Aufnahmemethode (2), harmonisches Oszillatorpotential, Quantenmechanik
Berechnung der technischen Indikatoren durch TA-Lib und Pandas
Einheitsmatrix und inverse Matrix: Lineare Algebra in Python <4>
Matrixberechnung und lineare Gleichungen: Lineare Algebra in Python <3>