使用Givens-rotations计算Hessenberg矩阵

时间:2014-07-25 14:27:11

标签: matlab math matrix qr-decomposition

我在matlab中进行实现来计算给定矩阵A的Hessenberg矩阵。 我理解数学并且我手工计算它,但我一直在采用相同的解决方案。

矩阵A =

-149.0000  -42.2037 -156.3165
 537.6783  152.5511  554.9272
        0   -0.0728    2.4489

我的结果=

-149.0000  -42.2037 -156.3165
 537.6783  152.5511  554.9272
        0   -0.0728    2.4489

matlab中的hess结果=

-149.0000   42.2037 -156.3165
-537.6783  152.5511 -554.9272
        0    0.0728    2.4489

我获得的结果来自仅使用一个给定旋转

∈{1}(3,4)

1.0000         0         0
     0    0.9987    0.0502
     0   -0.0502    0.9987

G {1}(3,4).transpose * A * G {1}(3,4)应该得到正确的解决方案。

正如您所看到的,我获得的结果有一些不属于他们的减号。 我的实现是错误的还是hess实现错误还是它们都有效?

非常感谢提前!

1 个答案:

答案 0 :(得分:0)

两者都有效。请注意:

  • 矩阵的Hessenberg分解并不是唯一的。例如,对角线下方+/- 1的对角矩阵是正交的;如果您只选择其中一个并通过它来共轭您的Hessenberg分解,则会得到不同的Hessenberg分解。
  • 您的A已经处于Hessenberg上层状态。没有什么需要做到让它进入上Hessenberg形式;您可以P = IH = A

我猜测Matlab使用Householder变换而不是Givens旋转来将矩阵减少到Hessenberg上层。 Householder变换是反思,因此具有负面决定因素。这可以翻转一些非对角线的标志。