矩阵 A 的雅可比平面旋转

Jacobi Plane rotation for a matrix A

如何对给定矩阵执行雅可比旋转(雅可比方法)J(p,q,theta)

存在旋转(c = cos(theta) and 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 中实施? 谢谢!!

一般来说,eigen-vectors只确定到一个符号,这里可以看到到第2行和第3行的符号是一致的。

原因是任何特征向量乘以 -1 都不会改变其作为特征向量的状态。如果您对此感到困扰,可以尝试使用文件交换中的 eigenshuffle