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
Vous devez vous connecter pour publier un commentaire.
Vous avez la bonne mise en œuvre, mais vous n'êtes pas vérifier les deux le vecteur propre et la valeur propre de convergence. Vous êtes la seule vérification de la valeur propre de convergence. La puissance de la méthode des estimations à la fois l'éminent vecteur propre et valeur propre, donc c'est probablement une bonne idée de vérifier pour voir si les deux de convergence. Quand je l'ai fait, j'ai réussi à obtenir
[1/3 1 1/3]
. Voici comment j'ai modifié votre code afin de faciliter ce:Lorsque j'exécute le code ci-dessus avec votre exemple d'entrée, j'obtiens:
Sur une note de côté en ce qui concerne
eig
, MATLAB probablement échelle que vecteur propre en utilisant une autre norme. Rappelez-vous que les vecteurs propres ne sont pas uniques et sont précis à l'échelle. Si vous voulez être sûr, il suffit de prendre la première colonne deV
, qui coïncide avec le vecteur propre dominant, et de diviser par la valeur la plus grande, de sorte que nous pouvons obtenir un composant à être normalisée à la valeur de 1, tout comme la Méthode de Puissance:Ceci est en accord avec ce que vous avez observé.
OriginalL'auteur rayryeng