在 Lapack (zhseqr) 和 matlab 中,成功计算了复杂矩阵的特征值。我注意到 QR 迭代或算法与该过程有关。重复 QR 迭代以调用上一步中 R*Q 的 QR 分解。
这是我的问题:Lapack (zgeqrf) 中的 QR 分解产生真正的对角线条目。结果,QR 迭代应该生成上三角矩阵的复对角元素。例如,
>> A = [0 2; 1 3*i];
已知此非对称 A 具有 i 和 2i 的特征值。由于特征值的大小不同,QR 迭代可能会很好地收敛而无需任何特殊偏移。所以,我们有来自 schur 分解或 Lapack 中的 QR 迭代的上三角矩阵:
>> schur(A)
ans =
0 + 1i -3 + 0.00066061i
0 + 0i 1.4366e-18 + 2i
现在我尝试实现 QR 迭代,看看算法是如何工作的:
num_iter = 200;
[Q,R] = qr (A);
for ii=1:num_iter,
[Q,R] = qr (R*Q);
end
但结果 R 有
R =
-2 + 0i 2.4535e-13 - 3i
0 + 0i 1 + 0i
我的代码收敛到特征值的绝对值,而不是复杂的特征值。
我的代码有什么问题?
谢谢。