【问题标题】:Eigenvalues in MATLABMATLAB 中的特征值
【发布时间】:2011-03-18 12:47:15
【问题描述】:

在 MATLAB 中,当我为对称矩阵运行命令 [V,D] = eig(a) 时,最大的特征值(及其相关向量)位于最后一列。但是,当我使用非对称矩阵运行它时,最大的特征值在第一列。

我正在尝试计算特征向量中心性,这要求我计算与最大特征值相关的特征向量。所以最大的特征值出现在两个不同的地方这一事实让我很难找到解决方案。

【问题讨论】:

  • 显式搜索特征值数组并获取最大的有那么难吗?

标签: matlab linear-algebra eigenvector eigenvalue


【解决方案1】:

我通常做的是:

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

【讨论】:

  • 这是一个更通用的解决方案,在计算 PCA 时很有用。
  • 如何在eigs中做到这一点?
【解决方案2】:

你只需要在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))

【讨论】:

    【解决方案3】:

    请注意,非对称矩阵往往具有复杂的特征值。

    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 没有想到复数。我想我通常只关心真正的特征值
    【解决方案4】:

    如果只关心与最大特征值相关的特征向量,使用eigs不是更好吗?

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

    【讨论】:

      猜你喜欢
      • 2014-07-29
      • 2018-12-30
      • 1970-01-01
      • 1970-01-01
      • 2011-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多