17074141作业6
作者:周紫祥,杜杨,朱凯杰,袁梦洲 发布时间:2019-06-19 19:02:34 浏览次数:72
1.问题:设 p1=[a1;b1;c1;d1] 和 p2=[a2;b2;c2;d2] 分别表示两个四元数 p1=a1+b1*i+c1*j+d1*k 和 p2=a2+b2*i+c2*j+d2*k ,编写程序求 p=q1*q2。
(1)设 p=a+b*i+c*j+d*k 则可用 p=[a; b; c; d] 表示.
(2)令
A=[a1 -b1 -c1 -d1
b1 a1 -d1 c1
c1 d1 a1 -b1
d1 -c1 b1 a1],
则 p=A*p2.
分析:根据四元数运算法则及矩阵与向量的乘积运算规则,建立函数,即可编成相应程序。
代码:
%建立四元数乘积运算的函数
function q=sys3(q1,q2)
syms i1 i2 i3;
syms a0 b0 c0 d0 q1 q2;
q1=input('q1=');
q2=input('q2=');
a0=q1(1)*q2(1)-q1(2)*q2(2)-q1(3)*q2(3)-q1(4)*q2(4);
b0=q1(1)*q2(2)+q1(2)*q2(1)+q1(3)*q2(4)-q1(4)*q2(3);
c0=q1(1)*q2(3)+q1(3)*q2(1)+q1(4)*q2(2)-q1(2)*q2(4);
d0=q1(1)*q2(4)+q1(4)*q2(1)+q1(2)*q2(3)-q1(3)*q2(2);
q=a0+b0*i1+c0*i2+d0*i3;
实验结果:
>> sys3
q1=[1 2 3 4]
q2=[1 2 3 4]
ans =
4*i1 + 6*i2 + 8*i3 - 28
2.问题:设 q1= 2+1*i+3*j+4*k 和 q2=0+1*i+1*j-1*k,利用习题1中编写的程序计算 p=p1*p2, 并且利用 Bj Bi Bk 画图解释四元数乘积与旋转之间的关系。
分析:运行习题一程序直接输入向量q1,q2,进行运算即可。而解释四元数乘积与旋转之间的关系,则以单位化的四元数用来描述旋转。以原点为旋转中心,旋转的轴是(a,b,c)(a^2 + b^2 + c^2 = 1),转θ角的旋转,用四元数表示就是,Q = (cos(θ/2),a*sin(θ/2), b*sin(θ/2), c*sin(θ/2))
代码:
syms q1 q2 q t x y z a b c;
q=sys3(q1,q2)
t=[0:0.1:20];%t为旋转角度
a=input('a=');b=input('b=');c=input('c=');%其中(a,b,c)为旋转轴
x=a*sin(t/2);y=b*cos(t/2);z=c*sin(t/2);
plot3(x,y,z,'.')
实验结果:
>> Untitled
q1=[2 1 3 4]
q2=[0 1 1 -1]
q =
7*i2 - 5*i1 - 4*i3
a=1
b=2
c=6