matlab - 旋转矩阵不正交

标签 matlab

我有一个不正交的旋转矩阵。怎么了。我无法得到它。 外部=[-6.6861,12.6118,-8.0660,[-0.4467,-0.3168,0.2380]*pi/180];%# deg 2 rad %#数据

ax=Exterior(4);
by=Exterior(5);
cz=Exterior(6);
%#Rotation in X

 Rx = [1  0        0
        0  cos(ax)  -sin(ax)
        0  sin(ax)  cos(ax)];


%#Rotation in Y    
Ry = [cos(by)  0  sin(by)
        0        1  0
        -sin(by) 0  cos(by)];


%#Rotation in Z        
Rz = [cos(cz) -sin(cz) 0
        sin(cz) cos(cz)  0
        0       0        1];
R=Rx*Ry*Rz;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% R=

  0.99998   -0.0041538   -0.0055292
0.0041969      0.99996    0.0077962
0.0054966   -0.0078192      0.99995

正交性检查

Inv(R)-R'=

 2.2204e-016  2.6021e-018  8.6736e-019
            0  1.1102e-016 -1.7347e-018
 -2.6021e-018  3.4694e-018  2.2204e-016

R*R'=

 2.2204e-016  2.6021e-018  8.6736e-019
            0  1.1102e-016 -1.7347e-018
 -2.6021e-018  3.4694e-018  2.2204e-016

为什么会有不同的标志??????

有错吗??

最佳答案

看起来正交性检查中的数字只是由于舍入误差造成的……它们真的很小。

题目有错误,@ChisA 指出。 OP 为 inv(R)-R'R*R'

粘贴了相同的矩阵

如果我们重建输入文件:

Exterior = [-6.681,12.6118,-8.0660,[-0.4467,-03168,0.2380]*pi/180]

ax = Exterior(4)
by = Exterior(5)
cz = Exterior(6)

Rx = [1 0 0 ; 0 cos(ax) -sin(ax) ; 0 sin(ax) cos(ax)]
Ry = [cos(by) 0 sin(by) ; 0 1 0 ;  -sin(by) 0 cos(by)]
Rz = [cos(cz) -sin(cz) 0 ; sin(cz) cos(cz) 0 ; 0 0 1]

R = Rx*Ry*Rz

inv(R)-R'

R*R'

然后通过 Octave 运行(我没有 MATLAB):

Exterior =

  -6.6810e+00   1.2612e+01  -8.0660e+00  -7.7964e-03  -5.5292e+01   4.1539e-03

ax = -0.0077964
by = -55.292
cz =  0.0041539
Rx =

   1.00000   0.00000   0.00000
   0.00000   0.99997   0.00780
   0.00000  -0.00780   0.99997

Ry =

   0.30902   0.00000   0.95106
   0.00000   1.00000   0.00000
  -0.95106   0.00000   0.30902

Rz =

   0.99999  -0.00415   0.00000
   0.00415   0.99999   0.00000
   0.00000   0.00000   1.00000

R =

   0.3090143  -0.0012836   0.9510565
  -0.0032609   0.9999918   0.0024092
  -0.9510518  -0.0038458   0.3090076

ans =

  -5.5511e-17   1.3010e-18   1.1102e-16
   2.1684e-19   0.0000e+00  -4.3368e-19
  -1.1102e-16  -4.3368e-19  -5.5511e-17

ans =

   1.0000e+00  -1.9651e-19  -4.6621e-18
  -1.9651e-19   1.0000e+00   8.4296e-19
  -4.6621e-18   8.4296e-19   1.0000e+00

注意 R*R' 非常接近 Iinv(R)-R' 非常接近 0。 另请注意,与 OP 相比,我得到了不同的小值。因为我使用的是不同的软件,所以舍入误差会有所不同。所以你永远不应该依赖两个 float 之间的精确比较。你总是应该包括一些公差。

我希望这能让事情变得更清楚一些。请参阅下面@gnovice 的评论,以获取有关舍入错误的更多详细信息的链接。

关于matlab - 旋转矩阵不正交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6042546/

相关文章:

python - 通过适用于 Python 的 MATLAB API 时方矩阵展平为行向量

matlab - 绘制拉格朗日点

matlab - 在Matlab中将大于52位的二进制字符串转换为单个字符串?

matlab - 在 Matlab 中获取符号多项式的系数

matlab - "Cut out"基于边缘检测的图像

matlab - 标记散点数据点

c++ - 从 Matlab 调用 C++ 类(具有内存持久性)

algorithm - 如何从 N 个元素创建所有可能分组的列表

matlab - 结构域是函数matlab

matlab - 如何在 MATLAB 中绘制置信区间?