【问题标题】:Does Matlab eig always returns sorted values?Matlab eig 是否总是返回排序值?
【发布时间】:2012-11-22 03:59:26
【问题描述】:

我在 Matlab 中使用了一个函数:

[V,D] = eig(C);

我看到 V 和 D 总是按升序排序。它总是这样还是应该在我得到VD 值之后对它们进行排序?

【问题讨论】:

  • 为什么不使用sort() 使c 有目的地降序和升序。然后看看eig 对它做了什么。因此,您可以通过实验或阅读手册得出结论。但我喜欢早期的:D 检查这个mathworks question
  • 我打赌这取决于所使用的算法。

标签: matlab matrix linear-algebra eigenvector eigenvalue


【解决方案1】:

如果你想保证排序升序的值,只需做一个额外的

if ~issorted(diag(D))
    [V,D] = eig(A);
    [D,I] = sort(diag(D));
    V = V(:, I);
end

按照你想要的方式对它们进行排序。

或者,使用eigs

[V,D] = eigs(A,size(A,1)-1)

【讨论】:

  • @kamaci 不是我在抱怨,但你为什么要接受 my 的回答,而不是 woodchips 的 better 回答?
  • 我同意你的回答对我来说是最好的。
  • (我会迂腐地认为I 是一个误导性的变量名称,并且会选择一个更好地反映它的变量名称,它只是一个索引数组,例如inds,而不是一个单位矩阵)
  • eigs 不负责这个标志。说A 是5乘5。如何获得eigs(不是eig)的最小3个特征值(不是幅度)和对应的特征向量?
  • 它似乎并不总是以相同的方式排序。当您要求所有特征值时,默认为降序,否则为升序。 IDK 如果这是我错过的文档中的错误或某些内容,但为了安全起见,我建议添加参数“largestabs”
【解决方案2】:

V 不按任何顺序排序,除了对应于相关特征值的顺序。但也许你不是那个意思。

特征值倾向于按降序排列,但这根本不能保证。它们往往是有序的,因为最大的往往会从顶部的算法中流出。 Eig 最终无法确保这一事实。

我可能会指出eigenshuffle 工具,该工具旨在获取一系列特征问题,然后再利用特征值(和相应的特征向量),使它们沿序列保持一致。

如果您确实确实需要它们以降序排列,那么请进行排序以确保这一事实。确保您也以相同的顺序对向量进行排序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-05
    • 2013-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-09
    • 1970-01-01
    • 2012-11-12
    相关资源
    最近更新 更多