[Wissenschaftlich-technische Berechnung mit Python] Lösen (verallgemeinerter) Eigenwertprobleme mit numpy / scipy mithilfe von Bibliotheken

Einführung

Das Eigenwertproblem der linearen Algebra ist in vielen Bereichen der Wissenschaft und Technik weit verbreitet. Hier ist eine Zusammenfassung, wie das ** (verallgemeinerte) Eigenwertproblem ** mit Pythons Numpy und Scipy gelöst werden kann. Die Methode ist im Anhang zusammengefasst.

Das verallgemeinerte Eigenwertproblem besteht darin, einen Vektor $ \ mathbf {x} $ und einen (komplexen) numerischen Wert $ \ lambda $ zu finden, die die folgenden Gleichungen erfüllen, wobei $ A $ und $ B $ als Matrizen verwendet werden. ** **.

$ A \ \mathbf{x} = \lambda \ B \ \mathbf{x} \ {\tag 1}$

Wenn $ B $ die Einheitsmatrix $ E $ ist, ist das Problem $ A \ \mathbf{x} = \lambda \ \mathbf{x} \ {\tag 2}$ Wird sein. Dieses Problem wird als ** Standardeigenwertproblem ** bezeichnet.

** Es gibt Leistungsmultiplikationsmethoden und QR-Methoden als numerische Berechnungsmethoden für Eigenwertprobleme [1], aber dieses Papier berührt sie nicht und beschreibt nur die grundlegende Verwendung der Bibliothek [2]. ** **.

Nachtrag: 2017 9/12

● Ich habe einen Artikel über die numerische Lösung durch Leistungsmultiplikation veröffentlicht. [Wissenschaftliche / technische Berechnung durch Python] Numerische Lösung des Eigenwertproblems der Matrix durch Leistungsmultiplikationsmethode, lineare Algebra


Inhalt

Betrachten Sie zunächst die obige Gleichung (2), die ein Standardeigenwertproblem ist. Verwenden Sie die Methode ** numpy.linalg.eig **.

** (1) Im Falle einer Ausführungsspalte ** ** (2) Für komplexe Matrix **

Als nächstes betrachten wir den obigen Typ der Gleichung (1). Verwenden Sie ** scipy.linalg.eig **.

** (3) Lösung des allgemeinen Eigenwertproblems **

Wenn ** $ B $ als Einheitsmatrix verwendet wird, können die Probleme (1) und (2) gelöst werden. ** **.

☆ ** Der zur Normalisierung des Eigenvektors im Berechnungscode (1) und (2) der Ausführungsspalte erhaltene Eigenvektor wurde durch seine Norm geteilt. ** **. Mit anderen Worten

for i in range(len(eig_vec)):
    eig_vec [i] = eig_vec[i]/np.linalg.norm(eig_vec[i])

Und sagte.

Bei einer komplexen Matrix (Code (2)) wird die normalisierte Lösung von Anfang an ausgegeben.


Code (1): Eindeutiger Wert / eindeutiger Vektor der Ausführungsspalte

import numpy as np
"""
Berechnung von Eigenwerten und Eigenvektoren von Ausführungsspalten
"""
#A_matrix=np.matrix([[2,4],[0,4]]) #Matrix A erzeugen
A_matrix=np.array([[2,4],[0,4]]) #Matrix A erzeugen


eig_val, eig_vec =np.linalg.eig(A_matrix) #Eig jeden Eigenwert und Eigenvektor_val, eig_In vec lagern

for i in range(len(eig_vec)):
    eig_vec [i] = eig_vec[i]/np.linalg.norm(eig_vec[i])
    
#Ausgabe des Berechnungsergebnisses
print (eig_val) 
print(eig_vec)

Ergebnis (1)

[2. 4.] # 2 eindeutige Werte (2 und 4)

[[ 0.74535599 0.66666667] [ 0. 1. ]] Der entsprechende Eigenvektor. Es ist auf 1 standardisiert.


Code (2): Eigenwert / Eigenvektor der komplexen Matrix

Sie kann genauso wie eine Ausführungsspalte berechnet werden. Beachten Sie, dass die komplexe Zahl $ a + bi $ als a + bj ausgedrückt wird, indem i in j in Python geändert wird.


import numpy as np
"""
Berechnung von Eigenwerten und Eigenvektoren komplexer Matrix
"""
#A_matrix=np.matrix([[1+4j,2j],[2,4j]]) #Komplexe Zahlen befinden sich in Matrixelementen
A_matrix=np.array([[1+4j,2j],[2,4j]]) #Komplexe Zahlen befinden sich in Matrixelementen
eig_val, eig_vec =np.linalg.eig(A_matrix) #Berechnung von Eigenwerten und Eigenvektoren
print (eig_val)
print(eig_vec)

Ergebnis (2)

** Eigenwert ** [ 1.95907589+5.37073062j -0.95907589+2.62926938j]

** Eindeutiger Vektor (komplexer Vektor mit auf 1 standardisierter Norm) ** [[ 0.76703668+0.j -0.36782319-0.52570033j], [ 0.52570033-0.36782319j 0.76703668+0.j ]]


Code (3): Verallgemeinertes Eigenwertproblem

import numpy as np
import scipy.linalg 


A = np.array([[-32,16,0],[16,-32,16],[0,16,-32]])
B = np.array([[-2, 16, 13], [16, -5, 16], [0, 1, -32]]) #Matrix B.
#B=np.identity(3)


eig_val,eig_vec =  scipy.linalg.eig(A,B)  #Lösen Sie das allgemeine Erstarrungswertproblem

for i in range(len(eig_vec)): #Normalisierung
    eig_vec [i] = eig_vec[i]/np.linalg.norm(eig_vec[i])

print (eig_val)
print(eig_vec)

Eigenwerte: ** Da Eigenwerte im Allgemeinen komplexe Zahlen sind, werden sie als komplexe Zahlen angezeigt, wobei j als reine imaginäre Zahl verwendet wird ** [-0.81267990+0.j 2.48526372+0.j 1.00000000+0.j]

array([-0.81267990+0.j,  2.48526372+0.j,  1.00000000+0.j])

Einzigartiger Vektor:

[[ -7.43016156e-01  -5.06563678e-01   4.37401683e-01]
 [ -6.38461105e-01   7.69654089e-01   2.24401124e-16]
 [ -2.11406258e-01  -2.50015624e-01  -9.44880724e-01]]

Nachtrag: Numpy- und Scipy-Linalg-Methoden

1.eig: Berechnen Sie Eigenwerte und Eigenvektoren der allgemeinen Matrix
2.ach: Elmeet ・ Berechnung von Eigenwerten und Eigenvektoren der reellen symmetrischen Matrix
3.eigvals: Berechnung der Eigenwerte der allgemeinen Matrix(Berechnet keinen Eigenvektor)
4.eigvalsh: Elmeet-Berechnung von Eigenwerten der reellen symmetrischen Matrix(Berechnet keinen Eigenvektor)

** Insbesondere ist die Berechnung von acht für symmetrische Matrizen besser als die für allgemeine Matrizen verwendete eig. Es ist sehr schnell. ** **.


Verweise

Es scheint verschiedene Texte zur numerischen linearen Algebra zu geben. ..

[1] F. Chatlan, ["Eindeutiger Wert der Matrix"](https://www.amazon.co.jp/%E8%A1%8C%E5%88%97%E3%81%AE%E5%9B% BA% E6% 9C% 89% E5% 80% A4-% E6% 9C% 80% E6% 96% B0% E3% 81% AE% E8% A7% A3% E6% B3% 95% E3% 81% A8 % E5% BF% 9C% E7% 94% A8-F-% E3% 82% B7% E3% 83% A3% E3% 83% 88% E3% 83% A9% E3% 83% B3 / dp / 443171037X / ref = sr_1_1? s = books & ie = UTF8 & qid = 1504668098 & sr = 1-1), Springer Fairlark Tokyo, 2003.,. Masatake Mori et al. ["Iwanami Lecture Applied Mathematics <12 [Methode 2] Lineare Berechnung"](https://www.amazon.co.jp/%E5%B2%A9%E6%B3%A2%E8%AC% 9B% E5% BA% A7-% E5% BF% 9C% E7% 94% A8% E6% 95% B0% E5% AD% A6% E3% 80% 8812% E3% 80% 89% E3% 80% 94 % E6% 96% B9% E6% B3% 951% E3% 80% 95-% E6% 95% B0% E5% 80% A4% E8% A8% 88% E7% AE% 97% E3% 81% AE% E5% 9F% BA% E7% A4% 8E% EF% BC% 8F% E3% 80% 94% E6% 96% B9% E6% B3% 952% E3% 80% 95-% E7% B7% 9A% E5 % BD% A2% E8% A8% 88% E7% AE% 97-% E6% AD% A3% E6% AD% A6 / dp / 4000108026), Iwanami Shoten, 1997.

[2] scipy-Website: https://docs.scipy.org/doc/scipy/reference/generated/scipy.linalg.eig.html

https://docs.scipy.org/doc/scipy-0.18.1/reference/tutorial/linalg.html Beachten Sie, dass ** scipy.linalg immer mit BLAS / LAPACK verknüpft ist (numpy ist eine Option), sodass angegeben wird, dass es grundsätzlich schneller als numpy.linalg ist. ** **. Der Teil ist unten nachgedruckt.

"scipy.linalg vs numpy.linal scipy.linalg contains all the functions in numpy.linalg. plus some other more advanced ones not contained in numpy.linalg

Another advantage of using scipy.linalg over numpy.linalg is that it is always compiled with BLAS/LAPACK support, while for numpy this is optional. Therefore, the scipy version might be faster depending on how numpy was installed.

Therefore, unless you don’t want to add scipy as a dependency to your numpy program, use scipy.linalg instead of numpy.linalg"

Recommended Posts

[Wissenschaftlich-technische Berechnung mit Python] Lösen (verallgemeinerter) Eigenwertprobleme mit numpy / scipy mithilfe von Bibliotheken
[Wissenschaftlich-technische Berechnung mit Python] Lösen simultaner linearer Gleichungen, numerische Berechnung, Numpy
[Wissenschaftlich-technische Berechnung mit Python] Inverse Matrixberechnung, numpy
[Wissenschaftlich-technische Berechnung mit Python] Spline-Interpolation dritter Ordnung, scipy
[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 mit Python] Summenberechnung, numerische Berechnung
[Wissenschaftlich-technische Berechnung von Python] 1-dimensionale 3D-diskrete Hochgeschwindigkeits-Fourier-Transformation, scipy
[Wissenschaftlich-technische Berechnung mit Python] 2D-Random-Walk (Drunken-Walk-Problem), numerische Berechnung
[Wissenschaftlich-technische Berechnung durch Python] Liste der Verwendung von (speziellen) Funktionen, die in der Physik unter Verwendung von scipy verwendet werden
[Wissenschaftlich-technische Berechnung nach Python] Numerische Lösung des Eigenwertproblems der Matrix durch Potenzmultiplikation, numerische lineare Algebra
[Wissenschaftlich-technische Berechnung von Python] Anpassung durch nichtlineare Funktion, Zustandsgleichung, scipy
[Wissenschaftlich-technische Berechnung mit Python] Berechnung des Matrixprodukts mit @ operator, python3.5 oder höher, numpy
[Wissenschaftlich-technische Berechnung mit Python] Lösen gewöhnlicher Differentialgleichungen, mathematischer Formeln, Sympy
[Wissenschaftlich-technische Berechnung mit Python] Histogramm, Visualisierung, Matplotlib
[Wissenschaftlich-technische Berechnung mit Python] Lagrange-Interpolation, numerische Berechnung
[Wissenschaftlich-technische Berechnung mit Python] Lösen der gewöhnlichen Differentialgleichung zweiter Ordnung nach der Numerov-Methode, numerische Berechnung
[Wissenschaftlich-technische Berechnung nach Python] Lösen der eindimensionalen Newton-Gleichung nach der Runge-Kutta-Methode 4. Ordnung
[Wissenschaftlich-technische Berechnung mit Python] Logistisches Diagramm, Visualisierung, Matplotlib
[Wissenschaftlich-technische Berechnung mit Python] Polarkoordinatendiagramm, Visualisierung, Matplotlib
[Wissenschaftlich-technische Berechnung durch Python] Lösung des Randwertproblems gewöhnlicher Differentialgleichungen im Matrixformat, numerische Berechnung
[Wissenschaftlich-technische Berechnung mit Python] Numerische Lösung der gewöhnlichen Differentialgleichung zweiter Ordnung, Anfangswertproblem, numerische Berechnung
[Wissenschaftlich-technische Berechnung nach Python] Numerische Lösung des Problems des eindimensionalen harmonischen Oszillators nach der Speed-Berle-Methode
[Wissenschaftlich-technische Berechnung mit Python] Beispiel für die Visualisierung von Vektorfeld, elektrostatischem Magnetfeld, Matplotlib
Wissenschaftlich-technische Berechnung mit Python] Zeichnen und Visualisieren von 3D-Isoplanes und deren Querschnittsansichten mit Mayavi
[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 von Python] Zeichnungsanimation der parabolischen Bewegung mit Locus, Matplotlib
[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 mit Python] Zeichnen, visualisieren, matplotlib 2D-Daten mit Fehlerleiste
[Wissenschaftlich-technische Berechnung von Python] Zeichnung von 3D-gekrümmter Oberfläche, Oberfläche, Drahtrahmen, Visualisierung, Matplotlib
Beschleunigung der numerischen Berechnung mit NumPy / SciPy: Anwendung 2
Beschleunigung der numerischen Berechnung mit NumPy / SciPy: Anwendung 1
[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 von Python] Lösen der eindimensionalen Schrödinger-Gleichung im stationären Zustand durch Aufnahmemethode (2), harmonisches Oszillatorpotential, Quantenmechanik
[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.
Warum was? Deep Learning Scientific Calculation Library Numpy Edition
[Wissenschaftlich-technische Berechnung mit Python] Numerische Lösung gewöhnlicher Differentialgleichungen erster Ordnung, Anfangswertproblem, numerische Berechnung
[Wissenschaftlich-technische Berechnung mit Python] Liste der Matrizen, die in Hinpan in der numerischen linearen Algebra vorkommen
[Wissenschaftliche und technische Berechnung von Python] Zeichnung fraktaler Figuren [Shelpinsky-Dreieck, Bernsley-Farn, fraktaler Baum]
[Wissenschaftlich-technische Berechnung von Python] Wellen "Stöhnen" und Gruppengeschwindigkeit, Wellenüberlagerung, Visualisierung, Physik der High School
Berechnung des Python-Numpy-Arrays
Altersberechnung mit Python
Beschleunigung der numerischen Berechnung mit NumPy / SciPy: Aufnehmen gefallener Ohren
[Numerische Berechnungsmethode, Python] Lösen gewöhnlicher Differentialgleichungen mit der Eular-Methode
Installieren Sie Python3 und die wissenschaftliche Berechnungsbibliothek unter Ubuntu (virtualenv + pip)
[Wissenschaftlich-technische Berechnung nach Python] Monte-Carlo-Simulation nach der Metropolenmethode der Thermodynamik des 2D-Anstiegsspinsystems
[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