5.3 La m´ ethode de la puissance
177
Une impl´ ementation MATLAB de la m´ ethode de la puissance est donn´ ee
dans le Programme 24. Dans cet algorithme comme dans les suivants, le test
de convergence est bas´ e sur l’estimation a posteriori (5.26).
Ici, et dans le reste du chapitre, les valeurs en entr´ ee z0, tol et nmax sont
respectivement le vecteur initial, la tol´ erance pour le test d’arrˆ et et le nombre
maximum d’it´ erations admissible. En sortie, les vecteurs lambda et relres
contiennent les suites {ν
(k)
} et {{r
(k)
2 /| cos(θ λ )|} (voir (5.26)), x et iter
sont respectivement les approximations du vecteur propre x 1 et le nombre
d’it´ erations n´ ecessaire ` a la convergence de l’algorithme.
Programme 24 - powerm : M´ ethode de la puissance
function [lambda,x,iter,relres]=powerm(A,z0,tol,nmax)
%POWERM M´ ethode de la puissance
% [LAMBDA,X,ITER,RELRES]=POWERM(A,Z0,TOL,NMAX) calcule la
% valeur propre LAMBDA de plus grand module de la matrice A et un vecteur
% propre correspondant X de norme un. TOL est la tol´ erance de la m´ ethode.
% NMAX est le nombre maximum d’it´ erations. Z0 est la donn´ ee initiale.
% ITER est l’it´ eration ` a laquelle la solution X a ´ et´ e calcul´ ee.
q=z0/norm(z0); q2=q;
relres=tol+1; iter=0; z=A*q;
while relres(end)>=tol & iter<=nmax
q=z/norm(z); z=A*q;
lambda=q’*z; x=q;
z2=q2’*A; q2=z2/norm(z2); q2=q2’;
y1=q2; costheta=abs(y1’*x);
if costheta >= 5e-2
iter=iter+1;
temp=norm(z-lambda*q)/costheta;
relres=[relres; temp];
else
fprintf(’Valeur propre multiple’); break;
end
end
return
Un code MATLAB pour la m´ ethode de la puissance inverse est donn´ e
dans le Programme 25. Le param` etre d’entr´ ee mu est l’approximation initiale
de la valeur propre. En sortie, les vecteurs sigma et relres contiennent les
suites {σ
(k)
} et {{ r
(k)
2 /(|(
w
(k) )
∗ q
(k)
|)} (voir (5.29)). La factorisation LU
(avec changement de pivot partiel) de la matrice M µ est effectu´ ee en utilisant
la fonction lu de MATLAB, tandis que les syst` emes triangulaires sont r´ esolus
avec les Programmes 2 et 3 du Chapitre 3.
177
Une impl´ ementation MATLAB de la m´ ethode de la puissance est donn´ ee
dans le Programme 24. Dans cet algorithme comme dans les suivants, le test
de convergence est bas´ e sur l’estimation a posteriori (5.26).
Ici, et dans le reste du chapitre, les valeurs en entr´ ee z0, tol et nmax sont
respectivement le vecteur initial, la tol´ erance pour le test d’arrˆ et et le nombre
maximum d’it´ erations admissible. En sortie, les vecteurs lambda et relres
contiennent les suites {ν
(k)
} et {{r
(k)
2 /| cos(θ λ )|} (voir (5.26)), x et iter
sont respectivement les approximations du vecteur propre x 1 et le nombre
d’it´ erations n´ ecessaire ` a la convergence de l’algorithme.
Programme 24 - powerm : M´ ethode de la puissance
function [lambda,x,iter,relres]=powerm(A,z0,tol,nmax)
%POWERM M´ ethode de la puissance
% [LAMBDA,X,ITER,RELRES]=POWERM(A,Z0,TOL,NMAX) calcule la
% valeur propre LAMBDA de plus grand module de la matrice A et un vecteur
% propre correspondant X de norme un. TOL est la tol´ erance de la m´ ethode.
% NMAX est le nombre maximum d’it´ erations. Z0 est la donn´ ee initiale.
% ITER est l’it´ eration ` a laquelle la solution X a ´ et´ e calcul´ ee.
q=z0/norm(z0); q2=q;
relres=tol+1; iter=0; z=A*q;
while relres(end)>=tol & iter<=nmax
q=z/norm(z); z=A*q;
lambda=q’*z; x=q;
z2=q2’*A; q2=z2/norm(z2); q2=q2’;
y1=q2; costheta=abs(y1’*x);
if costheta >= 5e-2
iter=iter+1;
temp=norm(z-lambda*q)/costheta;
relres=[relres; temp];
else
fprintf(’Valeur propre multiple’); break;
end
end
return
Un code MATLAB pour la m´ ethode de la puissance inverse est donn´ e
dans le Programme 25. Le param` etre d’entr´ ee mu est l’approximation initiale
de la valeur propre. En sortie, les vecteurs sigma et relres contiennent les
suites {σ
(k)
} et {{ r
(k)
2 /(|(
w
(k) )
∗ q
(k)
|)} (voir (5.29)). La factorisation LU
(avec changement de pivot partiel) de la matrice M µ est effectu´ ee en utilisant
la fonction lu de MATLAB, tandis que les syst` emes triangulaires sont r´ esolus
avec les Programmes 2 et 3 du Chapitre 3.
