题目
一子弹以45度角斜上方向射入空中,假定无量纲初始速度分量水平和垂直方向均为50,重力加速度为10,质量为1,
空气阻力与速度的平方成正比,系数为0.2。
列出微分方程并编程计算
1) 子弹到达最高点所需时间
2) 子弹落地点和出发点的距离
代码
function bullet
opts1=odeset(‘events’,@event1);
opts2=odeset(‘events’,@event2);
global k m g %定义全局要用的常量
k=0.2;m=1;g=10; %对要用的常量赋值
begin=[0;50;0;50];%初始条件
[t,y,thigh]=ode45(@f,[0:0.1:40],begin,opts1);%解方程找到达最高点所用时间
disp(sprintf(‘到达最高点用时%ds’,thigh))
[t,y,tfar,t1,i1]=ode45(@f,[0:0.1:40],begin,opts2); %解方程找最远点距离
comet(y(:,1),y(:,3))
axis([0 200 0 80])
disp(sprintf(‘落地点到出发点距离%dm’,t1(2,1)))%找出落地时x的坐标
end
function [value,isterminal,direction]=event2(t,y)
value=y(3);
isterminal=1;
direction=[];
end
function [value2,isterminal2,direction2]=event1(t,y),
value2=y(4);
isterminal2=1;
direction2=-1;
end
function ydot=f(t,y)
global k m g
ydot=[y(2);
-k.*y(2);
y(4);
-k.y(4)-mg];
end