matlab 矩阵与线性变换与计算
第五章:矩阵与线性变换
1
有限维空间的线性变换是简单而常用的数学变换,其实现可以归结为矩阵运算
y=Ax
刚体的运动,物体的线性变形,光线的反射等,都可以归结为线性变换。较复杂的运动,当运动幅度很小时,如物体的小幅振动,也可以利用线性微分方程作近似刻画,其离散解可以归结为一系列线性变换。
2
对于非线性问题,通常可以利用一系列线性变换来逼近。如非线性方程组
可以利用Newton迭代法逐步逼近问题的解
其中矩阵 是F的Jacobi矩阵的逆矩阵。
3
刚体的平移、旋转和镜面映射
刚体的旋转
刚体的旋转可以利用旋转变换实现。例如,围绕z轴的旋转的旋转变换矩阵为
如果一个物体同时围绕两个轴转动,(如陀螺的运动),则变换可以由两个矩阵的乘积实现。
4
例5.1:螺线的绕z轴旋转。
考虑螺线方程
x=cost, y=sint, z=at 0t2
对给定的节点 0
而 TzX 则是旋转后的数据。
5
螺线绕z轴旋转的动画参考程序
function rotation1
%rotation around z-axis
clear
%forming the parametric curve
cita=pi/20;
t=0:pi/10:10*pi;
x=cos(t);
y=sin(t);
z=0.2*t;
%rotation operator
A=[cos(cita) -sin(cita) 0
sin(cita) cos(cita) 0
0 0 1];
6
%initial figure
h=line(x,y,z,'EraseMode', 'Xor',... 'LineWidth',8,'Color', [1 0 0]);
view(90,20)
axis off
axis equal
xlim([-1.5,1.5]);ylim([-1.5,1.5]);zlim([0,pi])
% motion figure
m=length(t);X=[x;y;z]';
while 1
X=X*A; set(h,'XData',X(1:m),'YData',...
X(m+1:2*m),'XData',X(2*m+1:3*m))
drawnow
pause(0.1)
end
7
注1:由于线性变换不能作平移运动,因此,一般刚体的运动不能通过线性变换完成。解决这一问题的做法是引入齐次坐标
来代换普通坐标 。齐次坐标的含义是其乘以任意非零常数表示同一坐标。例如
8
利用上述坐标,一般的刚体运动
可以描写为
9
注2:围绕给定方向单位向量 ,旋转角为 的旋转变换矩阵为
其中
10
镜面映射
镜面映射变换为
其中x是垂直于镜面的单位向量。
设任意向量y分解为平行于x的分量y1和垂直于x的分量y2,则
即以垂直于x的过原点的平面为映射镜面。
11
例5.2:将上一实验中的旋转螺线沿x轴偏移两个单位,然后以yoz平面为镜面作镜面映射。
%rotation around z-axis
clear
%forming the parametric curve
cita=pi/20;
t=[0:pi/10:10*pi]';m=length(t);
x=cos(t);
y=sin(t);
z=0.2*t;
%rotation operator
A=[cos(cita) -sin(cita) 0
sin(cita) cos(cita) 0
0 0 1];
12
%mirror operator
d=[1 0 0];
B=[eye(3)-2*d'*d]';
%initial figure
h=line(x-2,y,z,'EraseMode', 'Xor',... 'LineWidth',8,'Color', [1 0 0]);
view(158,26)
axis equal
xlim([-3,3])
ylim([-1.5,1.5])
zlim([0,2*pi])
X1=[x-2,y,z]*B;
h1=line(X1(1:m),X1(m+1:2*m),X1(2*m+1:end),...
'EraseMode', 'Xor', 'LineWidth',8,'Color', [0 1 0]);
13
% motion figure
X=[x,y,z];
while 1