有空气阻力的斜抛运动MATLAB代码 下载本文

数1402 20143291 王文鹏

MATLAB程序代码:

clear; g=9.8;

p=4*10.^(-5); % B2/m

x1(1)=0; y1(1)=0; V1(1)=700; x2(1)=0; y2(1)=0; V2(1)=700; %各个值的初始量 dt=0.1;

theta=[35,45]; %角度

a=6.5*10^(-3);alfa=2.5; t=273; %修正量参数 for i=1:1:2

theta(i)=theta(i)*pi/180;

Vx1(1)=V1(1)*cos(theta(i)); %x轴没有密度修正的初始速度 Vy1(1)=V1(1)*sin(theta(i)); %Y轴没有密度修正的初始速度 Vx2(1)=V2(1)*cos(theta(i)); %x轴 有密度修正的初始速度 Vy2(1)=V2(1)*sin(theta(i)); %Y轴 有密度修正的初始速度 for n=1:1:1000;

V1(n)=sqrt(Vx1(n)^2+Vy1(n)^2); %合速度 ax1(n)=-(p)*V1(n)*Vx1(n); %没有修正的Fx ay1(n)=-g-(p)*V1(n)*Vy1(n); %没有修正的Fy

Vx1(n+1)=Vx1(n)+ax1(n)*dt; %x轴没有密度修正的瞬时速度 Vy1(n+1)=Vy1(n)+ay1(n)*dt; %y轴没有密度修正的瞬时速度 x1(n+1)=x1(n)+Vx1(n)*dt+0.5*ax1(n)*dt^2; %没有修正的x y1(n+1)=y1(n)+Vy1(n)*dt+0.5*ay1(n)*dt^2; %没有修正的y if (y1(n+1)<0) break end end

r=-y1(n)/y1(n+1);

x1(n+1)=(x1(n)+r*x1(n+1))/(r+1); y1(n+1)=0; %保证数值大于0 %以下注释与上面类似,只是有修正向 for n=1:1:1000;

V2(n)=sqrt(Vx2(n)^2+Vy2(n)^2);

ax2 (n) =-(p)*V2 (n)*Vx2 (n)*(1-a*y2(n)/t).^alfa; ay2 (n)=-g-(p)*V2(n)*Vy2 (n)*(1-a*y2(n)/t).^alfa; Vx2 (n+1)=Vx2(n)+ax2(n)*dt; Vy2(n+1)=Vy2(n)+ay2(n)*dt;

x2(n+1)=x2(n)+Vx2(n)*dt+0.5*ax2(n)*dt^2; y2(n+1)=y2(n)+Vy2(n)*dt+0.5*ay2(n)*dt^2; if (y2(n+1)<0)

break end end

r=-y2(n)/y2(n+1);

x2(n+1)=(x2(n)+r*x2(n+1))/(r+1); y2(n+1)=0; plot(x1,y1,'--',x2,y2,'b'); hold on

xlabel 水平距离/m ylabel ?高度/m

title('有空气阻力的抛射体运动') end

作图如下

有空气阻力的抛射体运动8000700060005000with densitycorrection高度/m40003000200010000without densitycorrection00.511.5水平距离/m22.5x 104