Question

Dans MATLAB, lorsque je lance la commande [V,D] = eig(a) pour une matrice symétrique, la plus grande valeur propre (et de son vecteur) est situé dans la dernière colonne.Cependant, quand je le lance avec un non-symétrique de la matrice, la plus grande valeur propre est dans la première colonne.

Je suis en train de calculer le vecteur propre centralité qui exige que je prenne le calcul du vecteur propre associé à la plus grande valeur propre.Donc, le fait que la plus grande valeur propre apparaît en deux endroits distincts, il est difficile pour moi de trouver la solution.

Était-ce utile?

La solution

Vous avez juste à trouver l'indice de la plus grande valeur propre en D, qui peut facilement être fait à l'aide de la fonction DIAG pour extraire la diagonale principale et de la fonction MAX pour obtenir le maximum de valeur propre et de l'index où il se produit:

[V,D] = eig(a);
[maxValue,index] = max(diag(D));  %# The maximum eigenvalue and its index
maxVector = V(:,index);           %# The associated eigenvector in V

NOTE: Comme les copeaux de bois, souligne, vous pouvez avoir des valeurs propres pour les matrices non symétriques.Lors de l'utilisation de l'ensemble d'entrée X, le MAX la fonction utilise l'ampleur du nombre complexe max(abs(X)).Dans le cas de l'égalité de l'ampleur des éléments, de l'angle de phase max(angle(X)) est utilisée.

Autres conseils

Ce que je fais habituellement est:

[V D] = eig(a);
[D order] = sort(diag(D),'descend');  %# sort eigenvalues in descending order
V = V(:,order);

Notez que les matrices non symétriques ont tendance à avoir des valeurs propres.

eig(rand(7))
ans =
       3.2957              
     -0.22966 +    0.58374i
     -0.22966 -    0.58374i
     -0.38576              
      0.49064              
      0.17144 +    0.27968i
      0.17144 -    0.27968i

Notez également que le gie ne renvoient pas explicitement triés valeurs propres (bien que l'algorithme a tendance à les produire dans un près de l'ordre de tri, en fonction de l'importance de la valeur propre), mais même si vous faites un tri, vous avez besoin de comprendre comment le tri fonctionne sur des vecteurs complexes.

sort(rand(5,1) + i*rand(5,1))
ans =
      0.42343 +    0.51539i
    0.0098208 +    0.76145i
      0.20348 +    0.88695i
      0.43595 +    0.83893i
       0.8225 +    0.91264i

Trier, lorsqu'il est appliqué aux entrées complexes, les travaux sur l'ampleur du nombre complexe.

Si vous n'en avez que pour le vecteur propre associé à la plus grande valeur propre, n'est-il pas préférable d'utiliser eigs?

[V, D] = eigs( a, 1, 'lm' ); %// get first eigenvector with largest eigenvalue magnitude.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top