2010-07-20 266 views
8

在MATLAB中,當我運行命令[V,D] = eig(a)作爲對稱矩陣時,最大特徵值(及其關聯向量)位於最後一列中。但是,當我用非對稱矩陣運行它時,最大的特徵值在第一列。MATLAB中的特徵值

我想要計算特徵向量中心性,它要求我計算與最大特徵值相關的特徵向量。因此,最大的特徵值出現在兩個不同的地方,這使我很難找到解決方案。

+4

難以顯式搜索特徵值數組並獲取最大特徵值嗎? – 2010-07-20 15:49:57

回答

5

你只需要找到在D最大特徵,它可以很容易使用功能DIAG提取主對角線和功能MAX它出現時的最大特徵值和特徵指數進行的指數:

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

注:作爲woodchips points out,你可以有非對稱矩陣特徵值的複雜。在複雜輸入X上操作時,MAX函數使用複數max(abs(X))的大小。在幅值相等的情況下,使用相位角max(angle(X))

+0

就是這樣。 – 2010-07-20 15:52:06

15

我最常做的是:

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

這是一個更通用的解決方案,在計算PCA時非常有用。 – psalvaggio 2013-03-26 21:01:15

+0

如何在'eigs'中做到這一點? – kyle 2016-08-19 08:36:53

4

注意,非對稱矩陣往往具有複雜的特徵值。

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 

還要注意的是EIG沒有明確回報排列特徵值(雖然背後的算法往往會產生它們在近排序順序,基於特徵值的大小),但即使你做一個排序,您需要了解如何對複雜向量進行排序。

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 

當應用於複雜輸入時,對複數的幅度進行排序。

+2

+1沒有想到複數。我想我通常只關心真正的特徵值 – Amro 2010-07-21 05:25:56

1

如果你只關心與最大特徵值相關的特徵向量,使用eigs不是更好嗎?

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