在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