Autovalores em MATLAB
-
18-09-2020 - |
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.
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.