Salut à tous, Je doit programmer la méthode dite de la puissance (qu'on a jamais vu) avec matlab
Exercice
Methode de la puissance. Cette methode permet de calculer la plus
grande valeur propre (en module) λ1 et le vecteur propre associ´e u1 d’une matrice A. Algorithme.
x0, qo = x0/||x0||
k = 1, 2, . . .,
xk = Aqk−1,
λk = xk(1)/qk−1(1) ,
γk = ||xk||,
qk = xk/γk
Vous prendrez pour xo une matrice identité et pour epsilon 0.01
J'ai donc réaliser cette fonction :
function[l,q,lk]=plusgrandevaleurpropre(A,e)
%l c'est lambda
[n m]=size(A); %n prend la première valeur de size(A)
%et m dont on ne se servira pas la 2eme
x=ones(n,1);
q=x/norm(x);
erreur=1;
l=1;
k=1;
while(erreur>=e)
x=A*q;
erreur=l; %donc erreur à pour valeur "l'ancien" lambda(lk-1)
l=x(1)/q(1);
lk(k)=l;
k=k+1;
erreur=abs(erreur-l)/abs(l) ;
Y=norm(x);
q=x/Y;
end
end
Mais je trouve bien que la méthode converge mais simplement le l renvoyé est le dernier calculé? est ce normal? Ne devrait on pas avoir la plus grande valeur propre en module ??
Par exemple en testant avec epsilon 0.01 je trouve :
l =
-3.9851
q =
0.3195
-0.3195
0.6509
-0.6101
lk =
Columns 1 through 8
1.7517 1.8466 1.1619 1.8633 -2.5717 0.5645 42.3314 0.3264
Columns 9 through 16
42.1565 -0.4122 -31.5829 -1.2868 -10.4698 -2.1185 -6.6904 -2.7858
Columns 17 through 24
-5.3131 -3.2564 -4.6862 -3.5601 -4.3709 -3.7452 -4.2041 -3.8543
Columns 25 through 32
-4.1134 -3.9172 -4.0633 -3.9532 -4.0355 -3.9736 -4.0199 -3.9851
>>
-----