2010-07-20 7 views
8

Wenn ich in MATLAB den Befehl [V,D] = eig(a) für eine symmetrische Matrix ausführen, befindet sich der größte Eigenwert (und der zugehörige Vektor) in der letzten Spalte. Wenn ich es jedoch mit einer nicht symmetrischen Matrix ausführe, ist der größte Eigenwert in der ersten Spalte.Eigenwerte in MATLAB

Ich versuche, die Eigenvektorzentralität zu berechnen, die erfordert, dass ich den Eigenvektor, der dem größten Eigenwert zugeordnet ist, berechne. Die Tatsache, dass der größte Eigenwert an zwei verschiedenen Stellen auftritt, macht es für mich schwierig, die Lösung zu finden.

+4

Ist es so schwierig, das Array der Eigenwerte explizit zu durchsuchen und den größten zu suchen? –

Antwort

5

Sie müssen nur den Index des größten Eigenwerts in D finden, die leicht DIAG die Funktion durchgeführt werden können, die Hauptdiagonale und die Funktion zu extrahieren MAX den maximalen Eigenwert und den Index zu erhalten, wo sie auftritt:

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

HINWEIS: Als woodchips points out können Sie komplexe Eigenwerte für nicht-symmetrische Matrizen. Bei einem komplexen Eingang X verwendet die Funktion MAX die Größe der komplexen Zahl max(abs(X)). Bei Elementen gleicher Größe wird der Phasenwinkel max(angle(X)) verwendet.

+0

Das ist der eine. –

15

Was ich in der Regel tun ist:

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

Dies ist eine allgemeinere Lösung, die beim Berechnen von PCA nützlich ist. – psalvaggio

+0

Wie macht man das in 'Eigs'? – kyle

4

Beachten Sie, dass nicht-symmetrische Matrizen komplexe Eigenwerte zu neigen.

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 

auch beachten, dass eig nicht explizit sortierten Eigenwerte zurückkehren (obwohl der zugrunde liegende Algorithmus sie in einer fast sortierten Reihenfolge zu produzieren neigt, basierend auf der Größe des Eigenwerts), aber auch wenn Sie eine Art tun zu tun, Sie müssen verstehen, wie die Sortierung komplexer Vektoren funktioniert.

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 

Sortieren, wenn auf komplexe Eingänge angelegt, arbeitet auf der Größe der komplexen Zahl.

+2

+1 hatte nicht an komplexe Zahlen gedacht. Ich denke, dass mir normalerweise nur die wahren Eigenwerte wichtig sind – Amro

1

Wenn Sie nur den Eigenvektor interessieren, der mit dem größten Eigenwert verbunden ist, ist es nicht besser, eigs zu verwenden?

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