0

我正在 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

我获得的结果是仅使用一个 Given 旋转

G{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 的实现是错误的,或者它们都是有效的?

提前谢谢了!

4

1 回答 1

0

两者都是有效的。注意:

  • 矩阵的 Hessenberg 分解不是唯一的。例如,对角线下 +/-1 的对角线矩阵是正交的;如果你只选择其中一个并将你的 Hessenberg 分解与之共轭,你会得到一个不同的 Hessenberg 分解。
  • A已经是上 Hessenberg 形式了。不需要做任何事情来让它变成上 Hessenberg 形式。你可以采取P = IH = A

我会冒险猜测 Matlab 使用 Householder 变换而不是 Givens 旋转来将矩阵简化为上 Hessenberg 形式。住户转换是反射,因此具有负面行列式。这可以翻转一些非对角线符号。

于 2014-07-25T17:21:31.977 回答