%pylab inline
Soit $A$ une matrice carrée diagonalisable de taille n dont la valeur propre la plus grande en module est simple, i.e. $$ |\lambda_1|>|\lambda_2|\geq\dots\geq|\lambda_n|. $$ La méthode de la puissance est une méthode itérative pour approcher $\lambda_1$ et son vecteur propre associé, noté $\vec{v}_1$. Elle consiste en l'algorithme suivant.
En supposant que le vecteur $\vec{q}_0^T\vec{v}_1\neq0$, $$ \vec{q}_k \to_{k\to\infty} \vec{v}_1 \quad\text{et} \quad \mu_k \to_{k\to\infty} \lambda_1 $$ et la vitesse de convergence dépend du quotient $\vert\lambda_2/\lambda_1\vert$. Plus celui-ci sera petit, plus la convergence sera rapide.
(a) Proposer un critère d'arrêt pour les itérations de l'algorithme de la méthode de la puissance introduit plus haut.
(b) Écrire une fonction $\texttt{[lambda,v,nIter]=puissance(A,q0,eps,nmax)}$ qui approche les valeurs $\lambda_1$ et $v_1$ de la matrice $A$ par la méthode de la puissance. L'algorithme itère jusqu'à ce que le critère d'arrêt devienne inférieur à $\texttt{eps}$ ou bien lorqu'on a fait plus de nmax itérations. La fonction doit aussi renvoyer $\texttt{nIter}$, i.e. le nombre d'itérations effectuées dans la boucle.
(c) On considère la matrice $$ A=\begin{pmatrix}15&-2&2\\1&10&-3\\-2&1&0\end{pmatrix}. $$
(d) On souhaite à présent évaluer l'influence de la condition initiale sur la convergence de la méthode. On considère pour cela la matrice réelle symétrique $$ B=\begin{pmatrix} 0,5172&0,5473&-1,224&0,8012\\ 0,5473&1,388&1,353&-1,112\\ -1,224&1,353&0,03642&2,893\\ 0,8012&-1,112&2,893&0,05827 \end{pmatrix}. $$
La méthode de la puissance inverse permet d'obtenir une approximation de la valeur propre d'une matrice $A$ la plus proche d'un nombre $t\in\mathbb{C}$ (où l'on suppose que $t\not\in\sigma(A)$). Ceci se fait en appliquant la méthode de la puissance à la matrice ${M_t}^{-1}=(A-t I)^{-1}$. Cet algorithme est cependant plus coûteux que la méthode de la puissance classique appliqué à A car il nécessite la résolution d'un système linéaire à chaque itération de l'algorithme. Pour ce faire, en pratique on calcule une fois pour toutes la factorisation LU de $M_t$, ce qui permet par la suite de ne résoudre que deux systèmes triangulaires à chaque itération de la méthode.
Sur le modèle de la fonction $\texttt{puissance}$ de l'exercice précédent, écrire une fonction $\texttt{[lambda,v,nIter]= puissanceinv(A,q0,t,eps,nmax)}$ mettant en oeuvre la méthode de la puissance inverse, le paramètre d'entrée $\texttt{t}$ étant l'approximation initiale de la valeur propre que l'on souhaite approcher. On utilisera la commande $\texttt{lu}$ pour calculer la factorisation LU de la matrice $M_t$ et, pour résoudre les systèmes triangulaires associés à cette factorisation.
Utiliser la fonction $\texttt{puissanceinv}$ pour calculer la valeur propre de plus petit module de la matrice $A$ de l'exercice précédent, en prenant $\vec{q}_0=\begin{pmatrix}1&1&1\end{pmatrix}^T/\sqrt{3}$ comme initialisation et une tolérance $\texttt{eps}=10^{-8}$ pour le critère d'arrêt.