Matlab线性代数实验

matlab实验

10人已加入

描述

Matlab线性代数实验
8.1 实验(Ⅰ):用Matlab学线性代数
8.1.1实验与观察:向量组的线性关系和解线性方程组
1.  用线性组合的方式产生向量组
【     clear  n=3; m=2; a=-10; b=10; 
  rand('seed',32), A = unifrnd(a,b,[n,m])       】
【    x = unifrnd(-1,1,[1,m]),   A(:,3)=x(1)*A(:,1)+x(2)*A(:,2)        】
2.Gauss消元法和向量组的线性关系的判定
【   B=rref(A)   】
【     r=2;m=2;s=5;
   X=[-B(1:2,r+1:m+s) ;eye(m+s-r)]   %基础解系      】
【     r1=rank(A(:,1:2)), r2=rank(A(:,1:3))      】
【      B=rref(A(:,1:3))   】    
【     B=rref(A);C=B(1:2,:)  】                          
3 . 观察程序    
zxy8_1.m    (主程序,产生向量并画图)
【   clf,n=3;m=2;s=5;   % 确定相关的参数
a=-10;b=10;
rand('seed',32),A = unifrnd(a,b,[n,m]),  %产生m个n维向量(生成向量)
r=[1:m]; l=1;p=1.2;
zxy8_1plot(A,r,l,p)          %将向量画出
for i=m+1:m+s                %产生组合向量
    x = unifrnd(-1,1,[1,m]);
    A(:,i)=zeros(n,1);
   for j=1:m
    A(:,i)=A(:,i)+x(j)*A(:,j);
   end
end
hold on,r=[m:m+s];l=2;p=0.5;
zxy8_1plot(A,r,l,p)               %用另一种方式画组合向量   】
其中调用了画图子程序zxy8_1plot
【  function out=zxy8_1plot(A,r,l,p)
  %A为若干3维向量拼成的矩阵, 绘制这些向量;r为向量,指明要绘制A的列向量指标。      
  %有两种不同的绘制方式,由参数l和p控制。
  %l=1,向量用红色粗线条绘制;l=2,向量用蓝色细线条绘制。p是控制箭头的大小参数。 
a=-10;b=10;k=50;
x=linspace(a,b,k);y=x;
[X,Y]=meshgrid(x,y);axis([a b a b a b]);
xlabel('x1','fontsize',14),ylabel('x2','fontsize',14),zlabel('x3','fontsize',14)
if l==1             %第一种绘图方式
  for i=r
    h1=plot3([0 A(1,i)],[0 A(2,i)],[0 A(3,i)],'rs','linewidth',3);        %画线段
    u(1)=A(1,i);v(1)=A(2,i);w(1)=A(3,i);u(2)=eps; v(2)=eps; w(2)=eps;
    h=quiver3([0 A(1,i)],[0 A(2,i)],[0,A(3,i)],u,v,w,p);                    %画箭头
    set(h,'linewidth',1,'color','red'),   axis([a b a b a b]),hold on,
    text(A(1,i),A(2,i),A(3,i),['\leftarrowA',int2str(i)],'fontsize',14);  %文字标注
  end
  Z=zxyplane(X,Y,A(:,1)',A(:,2)',0,0,0);              %计算平面的z坐标
  mesh(X,Y,Z), axis([a b a b a b]),hidden off,       %画平面
elseif l==2        %第二种绘图方式,结构同上
   for i=r
     h1=plot3([0 A(1,i)],[0 A(2,i)],[0 A(3,i)],'o--');
     set(h1,'linewidth',2,'color','blue')
     u(1)=A(1,i);v(1)=A(2,i);w(1)=A(3,i);u(2)=eps;v(2)=eps; w(2)=eps;
     h=quiver3([0 A(1,i)],[0 A(2,i)],[0,A(3,i)],u,v,w,p);
     set(h,'linewidth',1,'color','blue'),     axis([a b a b a b]),hold on,  
     text(A(1,i),A(2,i),A(3,i),['\leftarrowA',int2str(i)],'fontsize',14);
   end
 end             】
zxyplane.m      (计算平面的z坐标)
【   function z=zxyplane(x,y,a,b,x0,y0,z0)
 %向量a,b叉积构成平面的法矢t,平面过(x0,y0,z0)点
t(1)=det([a(2) a(3);b(2) b(3)]);
t(2)=-det([a(1) a(3);b(1) b(3)]);
t(3)=det([a(1) a(2);b(1) b(2)]);
if t(3)~=0
   z=z0-(t(1)/t(3))*(x-x0)-(t(2)/t(3))*(y-y0);
   k=find(z<=-8&z>=8);z(k)=NaN;
elseif t(3)==0
   disp('t(3)=0,this programme can not finish the work you want to do ')
end                            】
8.1.2应用、思考与练习
1. 观察极大线性无关组的意义
【     B=rref(A), C=B(1:2,:),     A(:,1:2)*C,  A               】                                             
2. 平面四连杆机构的设计      
     
3. 用Matlab做线性代数题(矩阵的符号演算)
          ◆ 试题   设 ,求 a的值使得  1. a4不能由a1、a2、a3线性表示。  2. a4可以由a1、a2、a3线性表示,并写出表达式。
      【   syms a
a1=[1;4;0;2]; a2=[2;7;1;3];a3=[0;1;-1;1];a4=[3;10;a;4];
A=[a1,a2,a3,a4]
for i=2:4             %行初等变换
  A(i,:)=A(i,:)-A(1,:)*A(i,1);
end
  A(2,:)=A(2,:)/A(2,2);
for i=3:4
  A(i,:)=A(i,:)-A(2,:)*A(i,2);
end
A   】
 
8.2 实验(Ⅱ):矩阵的相似化简
8.2.1 实验与观察:矩阵的特征―相似标准形的作用
 
1. 逼近直线的迭代点列
2. 估计直线-特征值、特征向量
【  [P,D] = eig(A)     】
【  x=linspace(a,b,30);  [pc,lamda]=eig(A),pc=-pc;   z1=pc(2,1)/pc(1,1)*x;
     plot(x,z1,'linewidth',3)              】
3.特征值和特征向量决定迭代性质?
 【  x0=[1 1]'; A=[1/5,99/100;1,0]; 
       [P,D]=eig(A);
       y0=inv(P)*x0;y=y0;
for i=1:50
 y=[D^i*y0,y];
end
x=P*y;
plot(y(1,:),y(2,:),'o',x(1,:),x(2,:),'*'),legend('Y','X=PY')       】
4. 观测程序说明
 zxy8_2.m的源代码如下:
【    clear,clf
a=-20*100;b=-a;c=a;d=b;p=0.1;  %设定画图范围
n=100;
A=[1/5,99/100;1,0];            %设定矩阵
axis([a b c d]),grid on,hold on
button=1
while button==1
[xi,yi,button]=ginput(1);           %用鼠标选初始点
plot(xi,yi,'o'),hold on,           
X0=[xi;yi];X=X0;
  for i=1:n
     X=[A*X,X0];                    %用这种方式作迭代,并画图
     h=plot(X(1,1),X(2,1),'R.',X(1,1:2),X(2,1:2),'r:');hold on
     quiver([X(1,2),1]',[X(2,2),1]',[X(1,1)-X(1,2),0]',[X(2,1)-X(2,2),0]',p)
    set(h,'MarkerSize',6), grid,
end
end
pause
x=linspace(a,b,30);              %画最大特征值所对应的特征向量所决定的直线[pc,lamda]=eig(A),pc=-pc;
z1=pc(2,1)/pc(1,1)*x;
z2=pc(2,2)/pc(1,2)*x;
h=plot(x,z1),set(h,'linewidth',2)                                】
8.2.2 应用、思考与练习
1. 植物基因的分布、杂交育种问题
3.高维线性离散动力系统       
 参考程序zxy8_3.m . (计算图8.6和8.7)
【   clear,clf
a=-2;b=-a;c=a;d=b;p=0.0001*abs(a); %设定画图范围
n=30;
A=[2,0;0,1/2]             %设定矩阵
axis([a b c d]),hold on
button=1                 
while button==1
[xi,yi,button]=ginput(1);   %用鼠标选初始点
plot(xi,yi,'o'),hold on,
X0=[xi;yi];X=X0;
  for i=1:n
     X=[A*X,X0];               %用这种方式作迭代,并画图
     h=plot(X(1,1),X(2,1),'R.',X(1,1:2),X(2,1:2),'r:');hold on
     quiver([X(1,2),1]',[X(2,2),1]',[X(1,1)-X(1,2),0]',[X(2,1)-X(2,2),0]',p)
   set(h,'MarkerSize',6), grid,
end
end             】
3. 主成分分析和线性变换
 下面是相应的程序:
【  x1=[-0.931 -3.931 20.069 -6.931 -4.931  20.931 -3.931 -12.931 28.069 0.069 -16.931 16.069 -11.931 -8.931 -7.931  0.069 0.069 -16.931 -8.931 -3.931 14.069 11.069 -15.931 21.069 -10.934 7.069 15.069 8.069 16.069];
     x2=[-0.379 -0.379 12.621 -4.379 -3.379 -11.379 -1.379  -3.379  6.621 2.621  -9.379  3.621  -7.379 -2.379 -3.379  3.621 0.379  -6.379 -3.379 -0.379  2.621  7.621  -7.379  4.621  -3.379 4.621  9.621 4.621  5.621]; 
       X=[x1',x2'];C=cov(X)         %计算协方差矩阵,注意数据需按列向量存入X中。
       [P,latent,explained] = pcacov(C)       %主成分分析,P即为所需的变换矩阵。    】
【     clf,  a=-20;b=30;c=-20;d=30;
  t=linspace(a,b,20);  z1= P(2,1)/P(1,1)*t;  z2=P(2,2)/P(1,2)*t;hold on,
  plot(x1,x2,'o',[a b],[0 0],':',[0 0],[c d],'b:',t,z1,t,z2),
   xlabel('x1'),ylabel('x2') ,   axis([a b c d]),axis('equal')                    】
  zxy8_5.m
【    clear, clf,a=-20;b=30,n=8,x=linspace(a,b,n);y=x;
[x1,x2]=meshgrid(x);[x4,x3]=meshgrid(x);      %生成网格线
A=[0 ,2.2;1 0.2];   a=pi/6;
for k=1:n                             %作网格线的线性变换
 for l=1:n
    z=A*[x1(k,l),x2(k,l)]';       %垂直线的的变换
    y1(k,l)=z(1);y2(k,l)=z(2);  %将变换后的坐标适当排列以便作图
    z=A*[x3(k,l),x4(k,l)]';       %水平线的的变换
    y3(k,l)=z(1); y4(k,l)=z(2);
 end
end
t=linspace(a,b,30);z1=5*cos(t);z2=15+5*sin(t);      %产生一个椭圆
z3=A*[z1;z2];                 %对椭圆的变换
figure(1)                        %在第一个图形窗口画x1-x2平面的内容plot(x1,x2,x3,x4,z1,z2),axis('equal')
figure(2)                        %在第二个图形窗口画y1-y2平面的内容

200多个MATLAB经典教程和MATLAB论文请查看matlab教程

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分