En science et en ingénierie, nous résolvons souvent des problèmes de valeurs propres en mécanique quantique et en systèmes oscillateurs.
Méthode d'alimentation est un problème de valeur propre standard.
C'est l'un des algorithmes pour trouver la valeur propre maximale (valeur propre dominante) de. ** ** Lorsque vous ouvrez le livre d'introduction autour de cette zone, vous le verrez souvent en premier.
** C'est un contenu très pédagogique pour apprendre la solution numérique rudimentaire du problème des valeurs propres. Dans cet article, nous examinerons cette méthode. ** **
Cette méthode est très simple.
Procédure de calcul et points
Donc, l'essentiel est de multiplier le ** A pour vérifier la convergence du vecteur direction. ** ** Ensuite, l'origine du nom "power method" est due à la méthode d'évaluation de la puissance de la matrice de coefficients A, comme on peut le voir en 2 ci-dessus.
De plus, la méthode de puissance est une méthode permettant de trouver la valeur propre maximale de la valeur absolue de A. ** Avec un peu d'ingéniosité, il est possible de trouver la valeur propre avec la plus petite valeur absolue, la valeur propre la plus proche du nombre complexe donné $ z $, la deuxième valeur propre, etc. ** Je prévois de publier un bon article.
Résoudre un problème de valeurs propres simple qui applique la méthode de multiplication de puissance, Cependant, assurez-vous que la valeur propre avec la valeur absolue maximale et le vecteur propre correspondant sont obtenus.
Comme $ A $ de $ A \ mathbf {u} = \ lambda \ mathbf {u} $
A=
\left[
\begin{matrix}
1 & 2 \\
3 & 4
\end{matrix}
\right]
Penser à.
La solution exacte pour la plus grande valeur propre absolue est $ \ frac {5+ \ sqrt {33}} {2} = 5.372281323 ... $.
En tant que condition de jugement de convergence
Valeur absolue du changement de $ \ lambda $ en répétant les étapes $ k $ et $ k + 1 $
"""
Problème de valeur propre de la matrice:Méthode d'alimentation:
"""
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 #Le vecteur propre initial. Approprié.
rel_eps = 0.0001 #Condition de convergence de la valeur propre
#Génération de colonnes Krylov
rel_delta_u=100.0
while rel_delta_u >= rel_eps : #Boucle principale
uu = u/np.linalg.norm(u) #Normalisation(Réglez la norme sur 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) #Changement relatif de la valeur propre par rapport aux étapes répétées
print("rel_delta_u_vec = ",rel_delta_u)
u= [ 0.41612395 0.9093079 ]
eigen_value= 5.37244655582
rel_delta_u_vec = 3.29180183204e-05
Vous pouvez voir que cela correspond très bien à la solution exacte 5.372281323 ...
Les livres suivants ont été utiles dans la rédaction de cet article. [1] est une description simple et facile à comprendre. [2] est un résumé de la façon de résoudre les problèmes de valeurs propres en utilisant numpy et scipy.
[1] Gilbert Strang, ["World Standard MIT Textbook Strang: Linear Algebra Introduction"](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] [[Calcul scientifique / technique par Python] Résolution d'un problème de valeur propre (généralisé) en utilisant numpy / scipy, en utilisant la bibliothèque] (http://qiita.com/sci_Haru/items/034c6f74d415c1c10d0b)
La multiplication de puissance est un problème de valeur propre standard
Dans
À partir du vecteur initial $ u_0 $
Il s'agit d'une méthode pour trouver la valeur propre / le vecteur propre avec la valeur absolue maximale. (Cette $ u_0, Au_0, A ^ 2u_0, A ^ 3u_0 $, ... est [colonne Kurilov](https://ja.wikipedia.org/wiki/%E3%82%AF%E3%83%AA% Il s'appelle E3% 83% AD% E3% 83% 95% E9% 83% A8% E5% 88% 86% E7% A9% BA% E9% 96% 93))
Maintenant, l'équation des valeurs propres
En **, il n'y a pas de réduction de la valeur propre **, c'est-à-dire
Supposer. Aussi, concernant l'ordre de grandeur des valeurs propres
Supposer.
Considérons maintenant un vecteur approprié $ u_0 $. Supposons que le coefficient $ c_i $ soit fixé de sorte que $ u_0 $ puisse être développé comme suit.
Quand $ A ^ k $, qui devrait être $ A $, est appliqué à ceci,
Ce sera.
Vous pouvez vous attendre à ce que ce soit le cas.
En appliquant à plusieurs reprises $ A $ au ** vecteur d'essai initial $ u_0 $ de cette manière, un vecteur parallèle au vecteur propre correspondant à la valeur propre avec la valeur absolue maximale est obtenu. ** **
Puisque le vecteur propre a toujours une indéfinité de multiple constant (multiple numérique complexe arbitraire) (cela signifie que la valeur propre ne change pas même si les deux côtés de l'équation propre sont multipliés par un complexe), celui qui convient à l'objectif est sélectionné. Dans la plupart des cas, un avec une norme de 1 est choisi.
La valeur propre maximale absolue $ \ lambda $ provient de l'équation des valeurs propres pour un $ k $ suffisamment grand.
Peut être calculé comme. Il s'agit du [quotient de Rayleigh](https://ja.wikipedia.org/wiki/%E3%83%AC%E3%82%A4%E3%83%AA%E3%83%BC%E5%95 Il s'appelle% 86).
Comme décrit ci-dessus, il est possible de calculer la valeur absolue maximale du problème des valeurs propres et le vecteur propre correspondant.
Recommended Posts