如何得到的特征值矩阵(没有eig, eigs) ?

10视图(30天)
我试着做一个项目,识别的特征值矩阵M(没有eigs, eig,…)。
我使用QR算法,它应该工作Hessenberg矩阵。
clc,清晰;%的窗口和工作区
M =魔法(6);%一些示例矩阵
理想= eigs (M)%由原来的matlab函数得到理想的解决方案
嗯=赫斯(M);%转换矩阵Hessenberg形式
eigs (hM)%检查,如果hM的特征值都是一样的. .在米
迭代= 800;
=嗯;
%使用QR算法检测特征值
k = 1:迭代%为更多的迭代,结果非常相似
(q, r) = qr (A);
=问' * *问;
结束
一、诊断接头(A)%显示结果
我期望在对角矩阵a的特征值其他数字(对角线以外的)应该是0。
一些特征值是正确的(111(主要)和0.0),但有些是不正确的。
结果是相同的为更多的迭代(迭代= 80000)。
看起来,QR法为主要工作还是assymetric特征值? ?
(我测试了相同的QR算法对原始矩阵M,但同样不正确的结果)。
我怎么能修复它,获得完整正确的解决方案?万博 尤文图斯 你能推荐我一些合适的方法/算法吗?
谢谢你!

答案(1)

纳尔逊鲁弗斯
纳尔逊鲁弗斯 2022年10月26日
你好!您的实现的迭代QR算法计算特征值看起来是正确的。
矩阵M,嗯,一个是单数(即他们有一个零特征值)。是否影响QR算法,我试着将M之前,通过迭代QR和未当结果显示在最后一行
M =魔法(6);%一些示例矩阵
= 0.2转变。*眼(6);% 0.2是任意的
理想= eigs (M)%由原来的matlab函数得到理想的解决方案
M = M +转变;
% QR的实现
%……
(转变),诊断接头(转变)%显示结果
我发现这个变化确实解决差异的观察。这里的问题是,当我将使用以下矩阵,
转变= -111。*眼(6);% 111的特征值! !
QR算法仍然工作尽管(M + shift)单数。
一个 第二种方法 解决你的问题是使用QR转移。这介绍了QR循环内部的一个转变。的原油实现如下:
%使用QR算法检测特征值
k = 1:迭代%为更多的迭代,结果非常相似
local_shift_coeff = 0.0;
如果abs ((2)) > 1.0 e-8
local_shift_coeff = A (2)
结束
local_shift = local_shift_coeff *眼(6);
(q, r) = qr (A-local_shift);
= r * q + local_shift;
结束
使用这种方法,QR算法解决方案确实匹配特征值使用eigs (M)。注意到上面,我只检查(3 2)和相应的挑选的转变(local_shift_coeff)。这是出于我的观察(3,2)在您的实现不是腐烂的迭代。一个更一般的实现应该检查所有(p + 1, p)条目。(见 https://www.math.usm.edu/lambers/mat610/class0331.pdf 将QR的解释)。

类别

找到更多的在线性代数帮助中心文件交换

社区寻宝

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

开始狩猎!