14

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

[V,D] = eig(C);

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

4

2 回答 2

32

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

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)
于 2012-12-04T14:00:56.833 回答
25

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

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

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

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

于 2012-12-04T13:58:19.690 回答