我正在matlab中实现计算给定矩阵a的海森伯格矩阵。我懂数学,我手工计算过,但我总是得出同样的答案。
矩阵A =
-149.0000 -42.2037 -156.3165
537.6783 152.5511 554.9272
0 -0.0728 2.4489
My result =
-149.0000 -42.2037 -156.3165
537.6783 152.5511 554.9272
0 -0.0728 2.4489
hess在matlab中的结果=
-149.0000 42.2037 -156.3165
-537.6783 152.5511 -554.9272
0 0.0728 2.4489
我得到的结果是只使用一个给定的旋转
G {1} (3, 4)
1.0000 0 0
0 0.9987 0.0502
0 -0.0502 0.9987
G{1}(3、4)。转置* A * G{1}(3,4)会得到正确的解
正如你所看到的,我得到的结果有一些负号,它们不属于。是我的实现错了,还是hess的实现错了,还是两者都有效?
提前感谢!
都是有效的。注意:
- 矩阵的Hessenberg分解不是唯一的。例如,对角线上有+/-1的对角线矩阵是正交的;如果你选择其中一个,用它来共轭你的海森伯格分解,你会得到一个不同的海森伯格分解。
- 你的
A
已经处于上海森伯格形态。什么都不需要做就能把它变成上海森伯格形式; 可以取
P = I
和H = A
。我冒昧地猜测Matlab使用Householder变换而不是给定旋转来将矩阵减少到上海森伯格形式。户主转换是反射,因此具有负行列式。这可以翻转一些非对角线符号