矩阵 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。
如何对给定矩阵执行雅可比旋转(雅可比方法)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。