矩阵A的Jacobi平面旋转

问题描述

如何对给定的矩阵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