matlab报告 - 用matlab研究抛体运动 下载本文

内容发布更新时间 : 2024/5/4 1:02:47星期一 下面是文章的全部内容请认真阅读。

y2=v2^2*sin(2*x)/g; %初速度为15下的射程 y3=v3^2*sin(2*x)/g; %初速度为20下的射程 y4=v4^2*sin(2*x)/g; %初速度为25下的射程 subplot(2,2,1); %选择2*2个区的一号区

plot(x,y1); %输出初速度为10下的射程曲线 title('v0=10'); %加图形标题

text(pi/4,10,'射程为10'); %在最大射程处加图形说明 subplot(2,2,2); %选择2*2个区的二号区

plot(x,y2); %输出初速度为15下的射程曲线 title('v0=15'); %加图形标题

text(pi/4,22.5,'射程为22.5'); %在最大射程处加图形说明 subplot(2,2,3); %选择2*2个区的三号区

plot(x,y3); %输出初速度为20下的射程曲线 title('v0=20'); %加图形标题

text(pi/4,40,'射程为40'); %在最大射程处加图形说明 subplot(2,2,4); %选择2*2个区的四号区

plot(x,y4); %输出初速度为25下的射程曲线 title('v0=25'); %加图形标题

text(pi/4,62.5,'射程为62.5'); %在最大射程处加图形说明 %程序2(抛射角与飞行路径及其一阶导数曲线) x=(0:pi/100:pi/2); %产生行向量x

y1=(sin(x)+(cos(x).*cos(x)).*log(1+sin(x))./cos(x))*100/9.8; %飞行路径长度与抛射角之间的函数关系 y2=cos(x).*(1-sin(x).*log((1+sin(x))./cos(x)))*200/9.8;

%飞行路径对抛射角的一阶导数的函数关系

m=(sin(pi/6)+(cos(pi/6)*cos(pi/6))*log(1+sin(pi/6))/cos(pi/6))*100/9.8; %抛射角取某一特定值时飞行路径值

n=cos(pi/3)*(1-sin(pi/3)*log((1+sin(pi/3))/cos(pi/3)))*200/9.8; %抛射角取某一特定值时飞行路径一阶导的值 plot(x,y1,'b:'); %输出飞行路径长度与抛射角之间的函数表达式 hold on; %设置图形保持状态

plot(x,y2,'k'); % 输出飞行路径对抛射角的一阶导数的函数表达系 hold off; %关闭图形保持

text(pi/6,m,'y1'); %在指定位置添加图例说明 text(pi/3,n,'y2'); %在指定位置添加图列说明 grid; %网格线控制 %程序3(平抛速度随时间的变化关系)

t=0:0.01:10; %产生时间的行向量 Vt=-sqrt(10^2+9.8*t.^2); %求速度

plot(t,Vt); %输出速度曲线 title('物体速度随时间的变化'); % 图形名称 grid %加网格线 %程序4(平抛运动的轨迹)

t=0:0.01:10; %产生时间行向量

- 16 -

s=-sqrt((3*t).^2+(0.5*9.8*t.^2).^2); %求位移

plot(t,s,'r:'); %输出位移曲线 title('物体平抛运动轨迹'); %图形名称 grid %加网格线

%程序5(物体斜抛运动曲线) clear; clc;

global location v0 alpha g;

options={'初始位置(坐标)','初始速度v0' ,'抛射角度','重力加速度g',}; topic='seting'; lines=1;

def={'[0,0]','20','45','9.8'};

h=inputdlg(options,topic,lines,def); location=eval(h{1}); v0=eval(h{2}); alpha=eval(h{3}); g=eval(h{4}); a=location(1); b=location(2);

alfa=alpha*pi/180;

tEnd=v0*sin(alfa)/g+((v0*sin(alfa)/g)^2+2*b/g)^0.5;%斜抛物体的运动时间 t=linspace(0,tEnd);

x=v0*cos(alfa)*t+a;%斜抛物体的水平位移

y=v0*sin(alfa)*t-0.5*g*t.^2+b;%斜抛物体的竖直位移 plot(x,y); hold on

plot(x(100),y(100),'o') xlabel 水平距离/m ylabel 高度/m title 抛体轨迹

%程序6(抛射角为90度的特殊抛体运动任意时刻的位置和速度)

v0=15; %初速度 h=10; %初始高度 g=-9.8; %重力加速度 k=0.8; %衰减系数 T=0; %落地时间

for t=0:0.05:20 % 产生时间的行向量 v=v0+g*(t-T); %求速度 y=h+v0*(t-T)+g*(t-T)^2/2; %求高度 if y<=0 %循环判断条件 v0=-k*v; %衰减的速度 T=t; %求球每次落地所用时间 h=0; %将高度变零 end %选择结构结束

- 17 -

subplot(1,2,1); %选择1*2中的一号区 pause(0.1); %延缓

plot(1,y,'or','MarkerSize',10,'Markerface',[1,0,0]); %输出求球的运动图像 title('运动变化图'); %图形名称 axis([0,2,0,25]); %坐标控制

subplot(2,2,2); %选择2*2中的二号区 axis([0,20,-25,30]); %坐标控制 grid on; %不画网格线

plot(t,v,'*r','MarkerSize',2); %画球的速度曲线 xlabel('时间t'); %坐标轴说明 ylabel('速度v'); %坐标轴说明 title('速度变化趋势图'); %图形名称 hold on; %设置图形保持状态 subplot(2,2,4); %选择2*2中的四号区 axis([0,20,0,25]); %坐标控制 grid on; %不加网格线

plot(t,y,'*b','MarkerSize',2); %画球的位置曲线 xlabel('时间t'); %坐标轴说明 ylabel('高度y'); %坐标轴说明 title('位置变化图'); %图形名称 grid on %不加网格线 hold on %设置图形保持状态 end %循环结束

%程序7(不同的出手速度和出手高度的出手角度和入射角度0 % 对于出手速度v=8.0~9.0m/s和出手高度h=1.8~2.1m,由(3)式 % 计算出手角度a1,a2,由(7)式计算出入射角度b1,b2,结果见表1 clear;clc;

H=3.05;h=1.8:0.05:2.1;L=4.6;g=9.8;

input('高度 出手角1 出手角2 入框角1 入框角2');

% v=sqrt(g*(H-h+sqrt(L*L+(H-L)^2))); for v=8.0:0.5:9.0;

for h=1.8:0.05:2.1;

%求球在出手时球心的出射角

a=atan(v.^2/(g*L).*(1+sqrt(1-2*g./v.^2.*(H-h+g*L^2./ b=atan(v.^2/(g*L).*(1-sqrt(1-2*g./v.^2.*(H-h+g*L^2./ a11=max(a,b);a21=min(a,b);

a1=180.*a11/pi;a2=180.*a21/pi; %求球入框时的入射角

b11=atan(tan(a11)-2.*(H-h)/L); b21=atan(tan(a21)-2.*(H-h)/L); b1=180.*b11/pi;b2=180.*b21/pi;

- 18 -

(2.*v.^2))))); (2.*v.^2)))));

R = [v' h' a1' b1' a2' b2'] end end

%程序8(出手角度和出手速度最大偏差) % 求出手时最大偏移距离 %求出手时最大偏移角

D=0.45;d=0.246;H=3.05;L=4.6;g=9.8;

input('出手速度 高度 出手角度 偏差a 偏差v 相对偏差a 相对偏差v'); for v=8.0:0.5:9 for h=1.8:0.05:2.1

a1=atan(v.*v./(g.*L).*(1+sqrt(1-2.*g./(v.*v).*(H-h+g.*L.*L./(2.*v.*v))))); a=180.*a1/pi;

b11=atan(tan(a1)-2.*(H-h)/L); b=180.*b11/pi;

xx=D/2-d/sin(b11)/2;%xx为

aa1=(g*L-v.*v.*sin(a1).*cos(a1)).*xx./L./(v.*v-g.*L.*tan(a1));a为 aa=aa1*180/pi;

vv=(g.*L-v.*v.*sin(a1).*cos(a1)).*xx.*v/(g*L^2);%vv为 A2=[v' h' a' aa' vv' (abs(vv./v))' (abs(aa./a))'] end

end

4.对本课的评述、建议

开设《数学实验与Matlab》是为让学生学习“用数学”,加强动手能力,训练创新思维。数学实验是一种有用的学习手段:通过对特点例子的计算和观察,可帮助我们直观地理解非常抽象的数学内容,了解他的应用背景,化枯燥为有趣,激发学习数学的兴趣。数学实验是一种有效的科研方法:讲一堆数据可视化,或者选择有代表性的特定实例进行观察,从而发现和归纳有意义的规律并进行理论论证。

做为初学者,应该有更多机会自己动手用matlab解决问题,从简单到复杂,让学生实际

- 19 -

掌握matlab的使用。因此建议让学生能有更多的机会到机房上机,学生在实际操作中遇到问题也能及时得到老师指点。也许这样能让学生更直观地掌握matlab。另一方面,希望课程中的内容能更多的与我院相关专业的知识联系,这样能更好的体现学以致用。 5.收获、体会和自我评分

通过这学期的学习,我对MATLAB这门高级计算机语言有了初步的了解,:其具有功能强、效率高、简单易行等特点。可靠的数值计算和符号计算功能、强大的绘图功能、简单易学的语言体系以及为数众多的应用工具箱是其区别于其它科技应用软件的显著标志。还具备很强的开放性,除内部函数外,所有MATLAB基本文件和各工具箱文件都是可读可改的源文件,用户可以通过对源文件的修改或加入自己编写的文件去构成新的专用工具箱。

MATLAB具有程序控制结构、函数调用、数据结构、输入输出、面向对象等程序语言特征,因此与传统编程语言一样,可以进行程序设计,而且简单易学,编程效率高。MATLAB以矩阵最为数据操作的基本单位,使得矩阵运算变得简捷、方便、高效,其还提供了十分丰富的数值计算函数、符号计算函数。用其绘图十分方便,还可对图形进行修饰和控制。 在综合实验报告的写作过程中,我翻阅了数学专业的课本,还有物理课本,同时也查阅了网上的资料,最终确定了实验主题。主要觉得数学方面的东西写起来内容较少,所有选择了物理方面内容虽少但应用很广的抛体运动。感触比较大的是,这个实验不再是一个简单的物理分析,而是从数学的角度定量地求解相关数据。Matlab可靠的数值计算和符号计算功能、强大的绘图功能可以说表现的淋漓尽致。不使用这种工具,很多问题或许只能有定性的结论甚至是不能有结论。在Matlab中,物理不再只是物理,数学也不只是数学,多学科只是结合才能解决一个实际问题。当然,我做为一个初学者,Matlab更多的应用还没掌握,更复杂的程序还不能使用。该实验参考了一些资料,借鉴的一些分析思想和编程格式,绝大部分公式是自己使用编译器编写,少部分复杂公式是套用的。所有程序均经过调试,能正确运行,有几行程序也是套用。不可否认,离开这些参考资料,我不能独立完成这个实验,毕竟我没有合作伙伴。所以,自我评定为85分。

- 20 -