2010-07-20 46 views
8

En MATLAB, cuando ejecuto el comando [V,D] = eig(a) de una matriz simétrica, el valor propio más grande (y su vector asociado) se encuentra en la última columna. Sin embargo, cuando lo ejecuto con una matriz no simétrica, el valor propio más grande está en la primera columna.valores propios en MATLAB

Estoy tratando de calcular la centralidad del vector propio que requiere que tomo el cálculo del vector propio asociado al valor propio más grande. Entonces, el hecho de que el valor propio más grande aparezca en dos lugares separados me dificulta encontrar la solución.

+4

¿Es tan difícil buscar explícitamente a través de la matriz de valores propios y tomar la más grande? –

Respuesta

5

Usted sólo tiene que encontrar el índice del valor propio más grande en D, lo que se puede hacer fácilmente usando la función DIAG para extraer la diagonal principal y la función MAX para obtener el máximo valor propio y el índice donde se produce:

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

NOTA: Comowoodchips points out, puede tener valores propios complejos para matrices no simétricas. Cuando se opera en una entrada compleja X, la función MAX utiliza la magnitud del número complejo max(abs(X)). En el caso de elementos de igual magnitud, se usa el ángulo de fase max(angle(X)).

+0

Esa es la única. –

15

Lo que suelo hacer es:

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

Esta es una solución más general que es útil cuando se computa PCA. – psalvaggio

+0

cómo hacer esto en 'eigs'? – kyle

4

Tenga en cuenta que las matrices no simétricas tienden a tener valores propios complejos.

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 

También tenga en cuenta que EIG no explícitamente volver valores propios ordenados (aunque el algoritmo subyacente tiende a producir en un orden casi ordenada, basada en la magnitud del valor propio), pero incluso si lo hace hacer una especie, necesitas entender cómo funciona el género en vectores complejos.

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 

Ordenar, cuando se aplica a las entradas complejas, funciona en la magnitud del número complejo.

+2

+1 no había pensado en números complejos. Supongo que por lo general solo me preocupo por los valores propios reales – Amro

1

Si solo cuida el vector propio asociado con el valor propio más grande, ¿no es mejor usar eigs?

[V, D] = eigs(a, 1, 'lm'); %// get first eigenvector with largest eigenvalue magnitude. 
Cuestiones relacionadas