按降序重新排序 Schur 分解中的特征值

计算科学 matlab 矩阵分解
2021-12-19 07:58:23

在这个命令中:

[US,TS] = ordschur(U,T,select)

根据Matlab文档,应该用什么代替select以降序排列特征值(最大值从最左上角的单元格开始)ordschur

说,

H=[-149 -50 -154; 537 180 546; -27 -9 -25];
[U,T]=schur(H);
[US,TS]=ordschur(U, T, select);

最后一行之后会出现错误。我尝试了不同的可用关键字,但没有一个能够按降序重新排列特征值,使得diag(TS) = [3 2 1].

还请考虑以下情况:

H = magic(6);
2个回答

我现在明白了。select必须是向量。所以可以改名。这里有一点改变,以确保特征值是按降序排列的。

H = magic(6);
[U, T] = schur(H);
[~, p] = sort(diag(T));
[~, r] = sort(p);
[US, TS] = ordschur(U, T, r);

我替换selectr它工作正常。

在您的示例中,[US,TS]=ordschur(U, T, [1 2 3]);将起作用。

该文档非常神秘。

给定一个集群索引的向量 CLUSTERS,与 E = EIG(T) 相称,并且具有相同 CLUSTERS 值的所有特征值形成一个集群,[US,TS] = ordschur(U,T,CLUSTERS) 将对指定的集群进行排序沿着 TS 的对角线降序排列,索引最高的簇出现在左上角。

你明白了吗?一开始我也没有。:) 本质上select可以是一个索引向量:告诉你特征值需要去select(i)哪个簇。i这些簇按降序排序:如果例如select = [1 2 3 3 2 1],则第 3 和第 4 个特征值(按 的对角线指定的顺序T)将首先出现(按未指定的顺序),然​​后是第 2 和第 5 个(按未指定的顺序),然​​后第一个和最后一个(按未指定的顺序)。

要按降序对特征值进行排序,您可以使用以下事实,即 的第二个输出sort是指定排列的索引向量。

[U, T] = schur(H);
[~, select] = sort(ordeig(T));
[US, TS] = ordschur(U, T, select);

(的第二个输出sort是我们可以用于此目的的索引向量。sort默认情况下排序越来越多,但随后ordschur按降序对簇编号进行排序,因此它可以神奇地工作。)

[编辑:这仍然不适用于所有矩阵;请参阅下面的@Jake 的答案以获得更正的版本。]

其它你可能感兴趣的问题