问题描述
如何对给定的矩阵J(p,q,theta)
执行Jacobi旋转(Jacobi方法)
存在一个旋转(c = cos(theta)和s = sin(theta))
[c s
-s c]
例如,我们如何估算以下矩阵的旋转
A = [-17.7147 -38.4117 30.6475
-51.3024 17.3859 -10.0354
-19.3323 -38.8931 30.3686
-51.2891 18.9043 -11.1523
-21.42 -39.2796 29.9065
-51.1701 20.7146 -12.4891
-24.2543 -39.5276 29.3515
-51.0782 22.9095 -14.1458]
使用C ++ Eigen libaray,结果如下:http://eigen.tuxfamily.org/dox-3.2/classEigen_1_1JacobiRotation.html
Result = [ 110.564 -7.77137 -0.308057
0 87.445 -64.7691
0 0 1.86159
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0]
使用matlab内置函数qr
([~,R]=qr(A)
)给我以下内容:
R = [ 110.5645 -7.7714 -0.3081
0 -87.4451 64.7691
0 0 -1.8616
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0]
可以看出,第一行结果在C ++和matlab中是相同的。 而第二和第三行符号不匹配。 什么是正确的解决方案或如何在matlab中实施? 谢谢!!
解决方法
通常,特征向量仅确定到一个符号,在这里您可以看到第二行和第三行的符号之间具有一致性。
这样做的原因是任何特征向量乘以-1都不会改变其作为特征向量的状态。如果您对此感到不安,可以尝试从文件交换中使用eigenshuffle。