2010-07-20 269 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.