Méthode de puissance dans MATLAB

Je tiens à mettre en œuvre les Méthode De Puissance pour la détermination de la dominante valeur propre et vecteur propre d'une matrice dans MATLAB.

Voici ce que j'ai écrit jusqu'à présent:

%function to implement power method to compute dominant
%eigenvalue/eigenevctor
function [m,y_final]=power_method(A,x);
m=0;
n=length(x);
y_final=zeros(n,1);
y_final=x;
tol=1e-3;
while(1)
    mold=m;
 y_final=A*y_final;
 m=max(y_final);
 y_final=y_final/m;
 if (m-mold)<tol
     break;
 end
end
end

Avec le code ci-dessus, voici un exemple numérique:

 A=[1 1 -2;-1 2 1; 0 1 -1]

A =

     1     1    -2
    -1     2     1
     0     1    -1

>> x=[1 1 1];
>> x=x';
>> [m,y_final]=power_method(A,x);
>> A*x

ans =

     0
     2
     0

Quand on compare avec les valeurs propres et les vecteurs propres de la matrice dans MATLAB, j'ai fait:

[V,D]=eig(A)

V =

    0.3015   -0.8018    0.7071
    0.9045   -0.5345    0.0000
    0.3015   -0.2673    0.7071


D =

    2.0000         0         0
         0    1.0000         0
         0         0   -1.0000

La valeur propre coïncide, mais le vecteur propre devrait être à la veille d' [1/3 1 1/3]. Ici, j'obtiens:

 y_final

y_final =

    0.5000
    1.0000
    0.5000

Cela est-il acceptable de voir cette inexactitude, ou ai-je fait une erreur?

[1/3 1 1/3] est le vecteur propre dominant ou après chaque itération vecteur propre approche [1/3 1 1//3]

OriginalL'auteur dato datuashvili | 2015-03-22