在 MATLAB 中,当我[V,D] = eig(a)
为对称矩阵运行命令时,最大的特征值(及其相关向量)位于最后一列。但是,当我使用非对称矩阵运行它时,最大的特征值在第一列。
我正在尝试计算特征向量中心性,这要求我计算与最大特征值相关的特征向量。因此,最大的特征值出现在两个不同的地方这一事实让我很难找到解决方案。
在 MATLAB 中,当我[V,D] = eig(a)
为对称矩阵运行命令时,最大的特征值(及其相关向量)位于最后一列。但是,当我使用非对称矩阵运行它时,最大的特征值在第一列。
我正在尝试计算特征向量中心性,这要求我计算与最大特征值相关的特征向量。因此,最大的特征值出现在两个不同的地方这一事实让我很难找到解决方案。
我通常做的是:
[V D] = eig(a);
[D order] = sort(diag(D),'descend'); %# sort eigenvalues in descending order
V = V(:,order);
您只需找到 中最大特征值的索引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 指出的那样,您可以拥有非对称矩阵的复杂特征值。对复数输入进行运算X
时,MAX函数使用复数的大小max(abs(X))
。在等幅元素的情况下,使用相位角max(angle(X))
。
请注意,非对称矩阵往往具有复杂的特征值。
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
排序,当应用于复数输入时,作用于复数的大小。
如果您只关心与最大特征值相关的特征向量,使用 不是更好eigs
吗?
[V, D] = eigs( a, 1, 'lm' ); %// get first eigenvector with largest eigenvalue magnitude.