在MATLAB中,當我運行命令[V,D] = eig(a)
作爲對稱矩陣時,最大特徵值(及其關聯向量)位於最後一列中。但是,當我用非對稱矩陣運行它時,最大的特徵值在第一列。MATLAB中的特徵值
我想要計算特徵向量中心性,它要求我計算與最大特徵值相關的特徵向量。因此,最大的特徵值出現在兩個不同的地方,這使我很難找到解決方案。
在MATLAB中,當我運行命令[V,D] = eig(a)
作爲對稱矩陣時,最大特徵值(及其關聯向量)位於最後一列中。但是,當我用非對稱矩陣運行它時,最大的特徵值在第一列。MATLAB中的特徵值
我想要計算特徵向量中心性,它要求我計算與最大特徵值相關的特徵向量。因此,最大的特徵值出現在兩個不同的地方,這使我很難找到解決方案。
你只需要找到在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))
。
就是這樣。 – 2010-07-20 15:52:06
我最常做的是:
[V D] = eig(a);
[D order] = sort(diag(D),'descend'); %# sort eigenvalues in descending order
V = V(:,order);
這是一個更通用的解決方案,在計算PCA時非常有用。 – psalvaggio 2013-03-26 21:01:15
如何在'eigs'中做到這一點? – kyle 2016-08-19 08:36:53
注意,非對稱矩陣往往具有複雜的特徵值。
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
當應用於複雜輸入時,對複數的幅度進行排序。
+1沒有想到複數。我想我通常只關心真正的特徵值 – Amro 2010-07-21 05:25:56
如果你只關心與最大特徵值相關的特徵向量,使用eigs
不是更好嗎?
[V, D] = eigs(a, 1, 'lm'); %// get first eigenvector with largest eigenvalue magnitude.
難以顯式搜索特徵值數組並獲取最大特徵值嗎? – 2010-07-20 15:49:57