Matlab et algo simple

Fermé
mickmac Messages postés 413 Date d'inscription jeudi 25 août 2011 Statut Membre Dernière intervention 15 août 2019 - 21 nov. 2012 à 15:37
Bonjour,
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

>>