Pergunta

No MATLAB, quando executo o comando [V,D] = eig(a) para uma matriz simétrica, o maior autovalor (e seu vetor associado) está localizado na última coluna.No entanto, quando executo com uma matriz assimétrica, o maior autovalor está na primeira coluna.

Estou tentando calcular a centralidade do autovetor, o que exige que eu calcule o autovetor associado ao maior autovalor.Portanto, o fato de o maior autovalor aparecer em dois lugares separados torna difícil para mim encontrar a solução.

Foi útil?

Solução

Você apenas precisa encontrar o índice do maior autovalor em D, o que pode ser feito facilmente usando a função DIAGNÓSTICO para extrair a diagonal principal e a função MÁX. para obter o autovalor máximo e o índice onde ele ocorre:

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

OBSERVAÇÃO: Como aparas de madeira aponta, você pode ter autovalores complexos para matrizes não simétricas.Ao operar em uma entrada complexa X, o MÁX. função usa a magnitude do número complexo max(abs(X)).No caso de elementos de igual magnitude, o ângulo de fase max(angle(X)) é usado.

Outras dicas

O que costumo fazer é:

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

Observe que matrizes não simétricas tendem a ter autovalores complexos.

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

Observe também que eig não retorna explicitamente valores próprios classificados (embora o algoritmo subjacente tenda a produzi-los em uma ordem quase classificada, com base na magnitude do valor próprio), mas mesmo se você fizer uma classificação, precisará entender como a classificação funciona em vetores complexos.

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

A classificação, quando aplicada a entradas complexas, funciona na magnitude do número complexo.

Se você se preocupa apenas com o autovetor associado ao maior autovalor, não é melhor usar eigs?

[V, D] = eigs( a, 1, 'lm' ); %// get first eigenvector with largest eigenvalue magnitude.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top