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.
● 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
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.
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)
[2. 4.] # 2 eindeutige Werte (2 und 4)
[[ 0.74535599 0.66666667] [ 0. 1. ]] Der entsprechende Eigenvektor. Es ist auf 1 standardisiert.
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)
** 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 ]]
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]]
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. ** **.
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