Eigenshuffle

坚持分类特征值和特征向量序列

6.3 k下载

更新2020年6月5日

查看许可协议

我见过很多次的问题在新闻组是eig返回其特征值和特征向量。本身,eig返回任意阶特征值和特征向量。他们通常几乎按顺序排序,但这并不是十拿九稳。另一个问题是特征向量可以有任意符号应用于他们。

更糟糕的是,当你有一个序列特征值问题的特征值有时可以跨越。一个想对特征值和特征向量排序序列是一致的。

我eigenshuffle而设计的。米做的。需要一个pxpxn数组,数组的每一页是一个矩阵,我们希望计算特征值。Eigenshuffle试图交换最大的特征值和特征向量一致的从一个步骤序列中的下一个。Eigenshuffle也选择标志适用于每个特征向量最大限度地符合前向量。自旋波的序列征值问题

作为一个例子,试试这个简单的矩阵函数的一个参数t。

Efun = @ (t) [1 t + 1 t ^ 2 t ^ 2 * 3; t + 1 2 * 2 t t ^ 2 1 - t ^ 3;…
以3 - 2 t ^ 2 t ^ 2 * t t ^ 2; t ^ 3 1 - t ^ 3 ^ 2 * 3 - t);

Aseq = 0 (4 4 21);
因为我= 21
Aseq(:,:我)= Efun((我)/ 10);
结束
[Vseq, Dseq] = eigenshuffle (Aseq);

看到eigenshuffle正确完成工作,
看看洗牌后的特征值按顺序。

t = (1: .1:1)”;
[t, Dseq ']
ans =
1 0.20181 2.3447 8.4535 - 5
-0.9 7.8121 4.7687 2.3728 0.44644
-0.8 7.2481 4.56 2.3413 0.65054
-0.7 6.7524 4.3648 2.2709 0.8118
-0.6 6.3156 4.1751 2.1857 0.92364
-0.5 5.9283 3.9855 2.1118 0.97445
-0.4 5.5816 3.7931 2.0727 0.95254
-0.3 5.2676 3.5976 2.0768 0.858
-0.2 4.9791 3.3995 2.1156 0.70581
-0.1 4.7109 3.2 2.1742 0.51494
0 0.30037 2.2391 4.4605 - 3
0.1 4.2302 2.8 2.2971 0.072689
0.2 4.0303 2.5997 2.3303 -0.16034
0.3 3.8817 2.4047 2.3064 -0.39272
0.4 3.8108 2.1464 2.2628 -0.62001
0.5 3.8302 1.8986 2.1111 -0.83992
0.6 3.9301 1.5937 1.9298 -1.0537
0.7 4.0927 1.2308 1.745 -1.2685
0.8 4.3042 0.82515 1.5729 -1.5023
0.9 4.5572 0.40389 1.4272 -1.7883
1 4.8482 -8.0012 e-16 1.3273 - -2.1755

2:5,列是特征值。看到第二特征值趋于零,但第三个特征值仍然是积极的。我们可以画出特征值和看到他们有交叉,在Efun t = 0.35附近。

阴谋(1:.1:1 Dseq”)

为了更好的升值eigenshuffle所做的,比较的结果直接eig Efun(3)和Efun (。4)。因此:

(V3, D3) = eig (Efun (3))
V3 =
-0.74139 0.53464 -0.23551 0.3302
0.64781 0.4706 -0.16256 0.57659
0.0086542 -0.44236 -0.89119 0.10006
-0.17496 -0.54498 0.35197 0.74061

D3 =
-0.39272 0 0 0
2.3064 0 0 0
2.4047 0 0 0
0 0 0 3.8817

[V4, D4] = eig (Efun (。4))
V4 =
-0.73026 0.19752 0.49743 0.42459
0.66202 0.21373 0.35297 0.62567
0.013412 -0.95225 0.25513 0.16717
-0.16815 -0.092308 -0.75026 0.63271

D4 =
-0.62001 0 0 0
2.1464 0 0 0
2.2628 0 0 0
0 0 0 3.8108

没有分类和洗牌,看看V3 (:, 3)。看到它很接近V4(:, 2),但随着翻转一个标志。由于特征向量上的符号是任意的,信号改变,最一致的序列将被选中。相比之下,看看特征向量在Vseq慢吞吞地,适当地交换的迹象。

Vseq (:,: 14)
ans =
0.3302 0.23551 -0.53464 0.74139
0.57659 0.16256 -0.4706 -0.64781
0.10006 0.89119 0.44236 -0.0086542
0.74061 -0.35197 0.54498 0.17496

Vseq (:: 15)
ans =
0.42459 -0.19752 -0.49743 0.73026
0.62567 -0.21373 -0.35297 -0.66202
0.16717 0.95225 -0.25513 -0.013412
0.63271 0.092308 0.75026 0.16815

注意,序列的广义特征值问题现在可以解决了。

与包括我在内的感谢易曹munkres同意作为子函数。

//www.tatmou.com/matlabcentral/fileexchange/20652

引用作为

约翰D 'Errico (2023)。Eigenshuffle(//www.tatmou.com/matlabcentral/fileexchange/22885-eigenshuffle), MATLAB中央文件交换。检索

MATLAB版本兼容性
创建R2007b
兼容任何释放
平台的兼容性
窗户 macOS Linux
类别
找到更多的在线性代数帮助中心MATLAB的答案

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!
版本 发表 发布说明
2.0.0.0之间

允许广义特征值的计算,通过允许用户提供Bsequence数组的大小和形状与房室收缩不全相同。

1.4.0.0

乔纳斯是正确的,munkres给显著提高我自己的代码的速度。我计划将在测试munkres是否存在在您的机器上,然后使用munkres,但是易建联曹亲切让我包括他的代码。