matlab练习题及答案详解(附程序)
Matlab练习题及答案详解
一、基础题
1、下表为
1)
2) 把任意两点距离的表中,自己到自己的距离,转变成无穷大
clc
clear
close all
data=xlsread('ti1.xls');%从excel里导入数据
x=data(1,:);%将data里第一行的所有列赋值给x
y=data(2,:);%将data里第二行的所有列赋值给x
n=length(x);%表x的长度
dis=zeros(n,n);%对距离表进行初始化
for i=1:n
for j=1:n
dis(i,j)=sqrt((x(i)-x(j))^2+(y(i)-y(j))^2);%平面坐标距离公式
end
end
dis(dis==0)=inf;%将距离表中为0的数值,变成无穷大
redis=dis;
2、按要求步骤,操作下表
要求:
1) 对每列进行[0,1]区间化'(min())/(max min())
=--;
x x x x
2) 把区间化后的表的右边3列,连接在左边3列下边,构成16行3列的表;
3) 把16行3列进行转置,得到3行16列的表。然后对列进行操作,把3行
16列的表变成一列,后转置成一行,得到最终的结果。
clc
clear
close all
x=load('ti2.txt');%从txt里导入数据
big=max(x);small=min(x);%算出每列的最大最小值
[m,n]=size(x);%表x的行和列的大小
newx1=zeros(m,n);%对newx1进行初始化,大小和初始x一样大
for i=1:n
newx1(:,i)=(x(:,i)-small(i))./(big(i)-small(i));
end
newx2=zeros(2*m,n/2);%对最新的表进行初始化大小为,行为newx1的2倍,列为一半
newx2(1:m,1:n/2)=newx1(1:m,1:n/2);%把左边3列不操作的值,直接赋值给newx2上边
newx2(m+1:end,1:n/2)=newx1(1:m,n/2+1:end);%把右边的3列,赋值给newx2下边
[p,q]=size(newx2);%表newx2的行和列的大小 newx3=zeros(p*q,1);%对newx3进行初始化 for j=1:q
newx3((j-1)*p+1:j*p,1)=newx2(:,q);%对newx3进行操作 end
% newx3=reshape(newx2,[],1); renewx=newx3';%最终的结果
3、数值运算
1)用matlab 求下列式子极限
(a) lim x → (b) 0x →2)用matlab 求下列函数的导数
(a)
22sin (1)y x =+ (b) arccos()(,)x f x y ye =
3)用matlab 求下列式子的定积分
(a) 4
?
(b) 31
2
-??
clc clear %===求极限 %====3.1.a=== syms x
y=(x^(1/2)-8)/(x^(1/3)-4);
re1a=limit(y,x,64)
%====3.1.b===
syms x
y=((x^2-2*x+4)^(1/2)-2)/x;
re1b=limit(y,x,0)
%===求导数
%====3.2.a===
syms x
f=(sin(x^2+1))^2;
re2a=diff(f,x)%对x求导
%====3.2.b===
syms x y
f=y*exp(acos(x));
re2bx=diff(f,x)%对x求偏导
re2by=diff(f,y)%对y求偏导
%===求定积分===
%====3.3.a===
syms x
re3a=int((x+2)/(2*x+1)^(1/2),x,0,4)%一重积分
%====3.3.b===
syms x y
re3b=int(int(y/(x^2-1),x,-2,-sqrt(2)),y,1,3)%二重积分
二、提高题
1、画一个正五边形,边长自定。
图1:示例一
clc
clear
close all
a=100;
b=a/(2*sin(36/180*pi));
x=b*[-cos(18/180*pi) 0 cos(18/180*pi)....
sin(36/180*pi) -sin(36/180*pi) -cos(18/180*pi)]; y=b*[sin(18/180*pi) 1 sin(18/180*pi)....
-cos(36/180*pi) -cos(36/180*pi) sin(18/180*pi) ]; plot(x,y,'linewidth',2)
text(-b/4,0,'正五边形','fontsize',20)
text(0,0,'y=','num2str(p(1))')
axis([-b-b/5 b+b/5 -b-b/5 b+b/5])
axis equal
box off
2、模拟小球的斜抛,模拟参数自定,画出速度图像。
图2:示例二
clc
clear
close all
g=9.8;
v0=10;
theta=pi/4;
detat=0.01;
x=0;y=0;t=0;X=[];Y=[];V=[];T=[];
vy=v0*sin(theta);
vx=v0*cos(theta);
h=plot(x,y,'r.','markersize',50);
while y>=0
delete(h)
vx=vx-0*detat;
vy=vy-g*detat;
v=sqrt(vx^2+vy^2);
x=x+vx*detat;
y=y+vy*detat;
t=t+detat;
%==图形控制部分
subplot(3,1,1)
plot(x,y,'.b')
h=plot(x,y,'r.','markersize',50); hold on
title('x-y','fontsize',14)
axis([0 11 0 3]);box off
subplot(3,1,2)
plot(x,v,'.R','markersize',5)
hold on
title('x-v','fontsize',14)
axis([0 11 6 v0+1]);box off
subplot(3,1,3)
plot(t,v,'.g','markersize',5)
hold on
title('t-v','fontsize',14)
axis([0 1.55 6 v0+1]);box off
pause(0.05)
X=[X,x];
Y=[Y,y];
V=[V,v];
T=[T,t];
end
p=polyfit(X,Y,2)
3、在1的基础上,加上空气阻力的影响,空气阻力大小与速度的平方成正比,
2
(比例系数自己定,也可以上网查,建议取0.5),画出速度图像。
f k v
图3:示例三
clc
clear
close all
g=9.8;
v0=10;
theta=pi/4;
detat=0.01;
x=0;y=0;t=0;X=[];Y=[];V=[];T=[];
vy=v0*sin(theta);
vx=v0*cos(theta);
k=0.5;m=2;
h=plot(x,y,'r.','markersize',50); while y>=0
delete(h)
vx=vx-(k*vx^2)/m*detat;
vy=vy-g*detat-(k*vy^2)/m*detat; v=sqrt(vx^2+vy^2);
x=x+vx*detat;
y=y+vy*detat;
t=t+detat;
%==图形控制部分
subplot(3,1,1)
plot(x,y,'.b')
h=plot(x,y,'r.','markersize',50); hold on
title('x-y','fontsize',14)
axis([0 11 0 3]);box off
subplot(3,1,2)
plot(x,v,'.R','markersize',5) hold on
title('x-v','fontsize',14)
axis([0 11 3 v0+1]);box off subplot(3,1,3)
plot(t,v,'.g','markersize',5) hold on
title('t-v','fontsize',14)
axis([0 2.75 3 v0+1]);box off pause(0.1)
X=[X,x];
Y=[Y,y];
V=[V,v];
T=[T,t];
end
p=polyfit(X,Y,2)
4、画一个叠的圆环,圆环参数自定。
图4:示例四clear;
n=input('圆的层数:');
r=5;%圆的半径
theta=linspace(0,2*pi);
x=r*cos(theta);
y=r*sin(theta);
figure,title('叠的圆环','fontsize',14) axis equal
grid on
hold on;
for j=1:n
b=(1+sqrt(3)*(j-1))*r;%圆心b for i=1:n+1-j
a=(2*(i-1)+j)*r;%圆心a
plot(x+a,y+b)
end
end
5、模拟两个小球在水平面上,进行完全弹性碰撞过程,分析两个小球构成系统
的机械能随时间的变化,小球参数自定。(注:考虑摩擦阻力)
附加1:分析两个小球构成系统的机械能随时间的曲线中,为什么在碰撞时刻出现拐点?
附加2:如果碰撞不是完全弹性碰撞,怎么模拟分析?
图5:示例五
clc
clear
close all
m1=2;m2=5;v0=20;detat=0.05;
g=9.8; mu=0.1;r=5;
a=v0^2/(2*mu*g)*1/2;
x1=-a/2;y1=r;
x2=0;y2=r;
v1=v0;v2=0;k=0;
V1=[];V2=[];T=[];t=0;
while max(abs(v1),abs(v2))>detat if abs(v1) v1=0; elseif abs(v2) v2=0; end clf axis equal axis([-a a -r 4*r ]) line([-a a],[0 0]) hold on qiu(x1,y1,r,'r') qiu(x2,y2,r,'g') x1=x1+v1*detat; x2=x2+v2*detat; if abs(x1-x2)>2*r v1=v1-sign(v1)*mu*g*detat; if k==1 v2=v2-sign(v2)*mu*g*detat; end else v11=v1; v1=v11*(m1-m2)/(m1+m2); v2=2*v11*m1/(m1+m2); k=1; end pause(0.01) t=t+detat; T=[T,t]; V1=[V1,v1]; V2=[V2,v2]; end E=1/2*m1*V1.^2+1/2*m2*V2.^2; figure subplot(2,1,1) plot(T,E','linewidth',2) box off grid on title('E-t') subplot(2,1,2) plot(T,V1,T,V2,'linewidth',2) box off grid on title('V1,V2-t') 三、挑战题 1、模拟圆环的匀减速运动,并画出速度时间(V-T)图像 图6:示例六 clc clear v=20;%初始速度 r=5; g=9.8; mu=0.3; dt=0.1; a=r; b=r; w=v/r; v0=v; t=0; x0=0; t1=t; x0=0; axis equal hold on axis([0 v.^2/(2*mu*g)+2*r 0 2.5*r]) grid on hold on theta=0:1/50:2*pi; x=a+r*cos(theta); y=b+r*sin(theta); q=plot(x,y,'.k'); p=plot(x(1),y(1),'.k'); while v>=0 delete(q); delete(p) v=v-mu*g*dt; w=w-(mu*g)/r*dt; theta=theta-w*dt; a=a+v*dt; b=r; t1=t1+dt; v0=[v0,v]; t=[t,t1]; x=a+r*cos(theta); y=b+r*sin(theta); q=plot(x,y,'.r'); p=plot(x(1),y(1),'.k','markersize',15); pause(0.2) title('\rm圆环匀减速滚动','fontsize',15) xlabel('距离\itm') ylabel('高度\itm') end figure plot(t,v0,'linewidth',2); title('圆环\itV-\itT图像','fontsize',15) xlabel('时间\rmt\it/s') ylabel('速度\rmV\itm/s') grid on hold on box off 2、模拟单摆的运动,并证明单摆的等时性。 图7:示例七clc clear close all l=1;%摆长 zq=[]; th=[]; % for l=1:10; theta=pi/3;%初始摆角 for theta=pi*10/180:0.01:pi/2%证明单摆的周期和初始最大角度无关 v=0;s=-l*theta;g=9.8;detat=0.01;t=0; T=[];S=[]; x=0;y=0; % plot(0,0,'*k','markersize',10) % hold on k=0.1;%速度衰减系数,证明衰减和单摆的周期无关 while (l*(1-cos(s/l))+1/2*v^2)>detat%全过程 % for i=1:1000 v=v+g*sin(theta)*detat-sign(v)*k*v^2*detat; s=s-v*detat; theta=s/l; x=-l*sin(theta); y=-l*cos(theta); t=t+detat; T=[T,t]; S=[S,s]; % clf % subplot(1,2,1) % plot(x,y,'.r','markersize',50); % hold on % plot([0,x],[0,y],'k','linewidth',2); % hold on,axis equal % axis([-l-1/2 l+1/2 -l-1/2 1/2]) % title(sprintf('模拟单摆,摆长L=%.1fm,',l),'fontsize',15) % xlabel('x/m') % ylabel('y/m') % box off,grid on,hold on % subplot(1,2,2) % plot(S,T,'linewidth',2) % hold on, % axis([-l-1/2 l+1/2 0 10]) % title(sprintf('衰减系数k=%.1f,s-t图像',k),'fontsize',15) % xlabel('离开平衡位置的弧长s/m') % ylabel('时间t/s')