如何改进非对称矩阵的这种双移位 QR 算法?

计算科学 矩阵 特征值
2021-12-15 15:59:11

我已经实现了 ETH Zurich 的这份报告中介绍的双班次 QR 算法的一个版本(从第 77 页开始)。该算法通过对我们的原始矩阵(以 Hessenberg 格式)应用正交相似变换来利用隐式 Q 定理。这引入了一个“凸起”,然后我们通过应用连续的户主反射器将其赶出矩阵。最终目标是将原始矩阵转换为实 schur 形式(虽然不是真的,因为复杂的特征值形成为沿对角线的块)。该算法的伪代码如下:

在此处输入图像描述

(我已经在 C 中实现了这个特定的算法)

然而,当试图解决伴随矩阵来检索特征值时,我发现它经常出错。甚至他们的示例结果6×6无法解决所有特征值:

在此处输入图像描述

在此处输入图像描述

将此与我的结果进行比较,它们有很多相同的错误:

5.000000 6.000000 0.390635 -1.005053 -7.905002 7.702966 
-6.000000 5.000000 -10.791799 -2.710116 -14.579765 -19.663045 
0.000000 0.000000 3.491643 -2.656106 -4.440683 9.373136 
0.000000 0.000000 3.843327 -1.491643 -10.829108 -5.067750 
0.000000 0.000000 -0.000000 0.000000 4.000000 4.922432 
-0.000000 -0.000000 0.000000 0.000000 0.000000 3.000000

即使是较小的矩阵也会带来容差非常低的问题(尽管它们很接近):

输入:(特征值为:4、-3、2、-1)

2.000000 13.000000 -14.000000 -24.000000 
1.000000 0.000000 0.000000 0.000000 
0.000000 1.000000 0.000000 0.000000 
0.000000 0.000000 1.000000 0.000000 

输出:

2.968869 11.491388 21.498124 17.801229 
0.535591 -1.968869 -3.241184 -2.692433 
-0.000000 0.000000 2.000000 1.078408 
0.000000 -0.000000 -0.000000 -1.000000 

有人可以建议可以进行哪些改进以获得更好的结果?我已经尝试实现我发现的另一种算法,但它提供了更糟糕的结果。即使我通过 Matlab 而不是我自己的 C 版本软件运行它。

1个回答

在您的问题中作为 H(11) 给出的矩阵实际上确实具有预期的特征值1±2i,5±6i,3, 和4. 特别是,红色圈出的 2x2 块的特征值是1±2i.

左上角的 2x2 块具有它所具有的形式,这纯属幸运,因此很明显它的特征值为5±6i.