2011-05-18 175 views
2

我有旋转矩阵不正交。怎么了。我无法得到它。 外观= [ - 6.6861,12.6118,-8.0660,[ - 0.4467,-0.3168,0.2380] * PI/180];%#DEG 2弧度 %#数据旋转矩阵不正交

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 

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

任何错误?

回答

11

看起来像正交检查中的数字只是由于四舍五入的错误...他们真的很小。

@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' 

并通过倍频运行(我没有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的值。因为我正在使用不同的软件,舍入误差将会不同。所以你不应该依赖两个浮点数之间的精确比较。你总是应该包含一些宽容。

我希望这可以让事情变得更清楚。有关四舍五入错误的更多详细信息,请参阅下面的@gnovice的评论。

+0

但是,我认为他们必须有相同的符号。 – Shahgee 2011-05-18 09:44:22

+2

我不知道他们为什么会有相同的标志。 – idz 2011-05-18 10:01:16

+4

@shahbaba:使用[double precision](http://en.wikipedia.org/wiki/Double_precision_floating-point_format)数字时,第16位有效数字的错误肯定是浮点舍入错误,这些可以发生在任一方向(正向或负向)。有关更多信息,请查看[此相关问题](http://stackoverflow.com/q/686439/52738),[本文](http://download.oracle.com/docs/cd/E19957-01/ 806-3568/ncg_goldberg.html)和[此MATLAB文档](http://www.mathworks.com/help/techdoc/ref/eps.html)。 – gnovice 2011-05-18 14:10:08

1

我不明白为什么R*R'应该接近于零。它应该是3x3的身份矩阵。

您可能在原始问题上有复制和粘贴错误。

+0

你是绝对正确的。我非常关注四舍五入错误,我甚至没有注意到这一点。我将用输出和那些信息更新它。你有敏锐的眼光! (1) – idz 2011-05-18 21:59:25