猎狗追兔子数学实验报告.docx
《猎狗追兔子数学实验报告.docx》由会员分享,可在线阅读,更多相关《猎狗追兔子数学实验报告.docx(11页珍藏版)》请在冰豆网上搜索。
猎狗追兔子数学实验报告
数学实验报告—猎狗追赶兔子模型实验
一.实验问题
有一只猎狗在B点位置发现了一只兔子在正东北方距离它200米的地方O处,此时兔子开始以8米/秒的速度向正西北方距离为120米的洞口A全速跑去,假设猎狗在追赶兔子的时候始终朝着兔子的方向全速奔跑,用计算机仿真法等多种方法完成下面的实验:
(1)问猎狗能追上兔子的最小速度是多少?
(2)在猎狗能追上兔子的情况下,猎狗跑过的路程是多少?
(3)画出猎狗追赶兔子奔跑的曲线图。
(4)假设在追赶过程中,当猎狗与兔子之间的距离为30米时,兔子由于害怕,奔跑的速度每秒减半,而猎狗却由于兴奋奔跑的速度每秒增加0.1倍,在这种情况下,再按前面的
(1)—(3)完成实验任务。
一.问题的分析
模型求解
(1)求解析解
有方程:
解该变量分离方程得
等价地亦可转换为
P-
从而可得
1)当r<1时,方程的解为
此为猎狗追赶兔子的路线函数。
当x=0时,猎狗追上兔子,猎狗走过的距离为
追赶时间为
2)当r=1时,方程的解为
Y=
3)当r>1时,方程的解为
(2)用MATLAB软件求解析解
在MATLAB软件命令窗中执行命令
Dsolve(‘Dy=1/2*((x/c)^r-(c/x)^r)’,’y(c)=0’,’x’)
得方程的解析解为
ans=1/2*exp(-r*(log(c)-log(x)))*c^r*(1/c)^r/(r+1)*x+1/2*
exp(r*(log(c)-log(x)))/((-1+r)*x-1/2*c*(-(1/c)^r*c^r+c^r*(1/c)^r*r+r+1)/(r^2-1)
(3)用MATLAB软件求数值解
先生成初值问题的函数文件。
Functiony=hs(t,y)
Y=8/18*((t/3)^(8/18)-(3/t)^(8/18))
保存为hs.m,然后在MATLAB软件命令窗中用二三阶龙格——库塔算法计算初值问题的数值解。
执行命令
Ode23(‘hs’,200,0.0005,0)
若选用四五阶龙格——库塔算法解初值问题,则执行命令
Ode45(‘hs’,200,0.0005,0)
最终得到猎狗的坐标。
此次问题可以选用计算机仿真饭
显然可以将事件坐标转换到第一象限内,设兔子初始位置O为(0,0),运动方向为沿x轴正方向,速度为a。
洞口A坐标为(0,120)。
猎狗初始位置B为(200,0),运动速度为b。
时兔子坐标为(0,tzy),猎狗坐标为(lgx,lgy)。
追赶的方向可以用方向余弦表示:
取时间步长为Δt,则在时刻t+Δt时,猎狗位置可表示为
,
。
仿真算法:
第一步:
设置时间步长为Δt,速度a,b,猎狗跑过的路程s初始化为0,初始位置;
第二步:
由
猎狗与兔子的位置坐标计算二者在
时的坐标(
)和(
):
,
,
,
,
并在图中标出改点。
。
第三步:
计算猎狗与兔子之间的距离
,
如果
小于事先设定的距离(就是认为猎狗追上兔子之间的距离),则退出循环,否则让时间产生一个步长,返回第二步继续进行下一次循环。
第四步:
当循环成功退出后,
为兔子被捉时跑过的距离,通过改变猎狗的速度b使其等于120,此时的b即为猎狗能追上兔子的最小速度,
为猎狗跑过的路程,由第二步中所标出的点构成的图即为够追兔子奔跑的曲线图。
2.问题(4)的分析过程与前三问类似,只需在第三步中增加一个对
的判断,当
小于等于30米时,Δt每增加一秒分别对a、b进行一次修正,即a=a/2,b=1.1*b。
三.程序设计的流程
1.取时间步长为0.1,当猎狗与兔子相距小于等于0.3米时视为追上。
问题
(1)~(3)的程序(此为对猎狗速度b进行多次修正后的程序):
当猎狗速度为15m/s时:
c=200;
a=8;
b=15;
lgxb=[];lgyb=[];tzxb=[];tzyb=[];
d=1;
dt=0.1;
t=0;
lgx=c;lgy=0;tzx=0;tzy=0;
holdon
axis([0,200,0,150])
title('猎狗追兔子')
text(0,120,'洞口A')
text(200,0,'B')
text(0,0,'O')
while(sqrt((lgx-tzx)^2+(lgy-tzy)^2)>d)
t=t+dt;
lgx=lgx-b*dt*lgx/sqrt(lgx^2+(a*t-lgy)^2);
lgxb=[lgxb,lgx];
lgy=lgy+b*dt*(a*t-lgy)/sqrt(lgx^2+(a*t-lgy)^2);
lgyb=[lgyb,lgy];
tzy=a*t;
tzyb=[tzyb,tzy];
end
lgxb;
lgyb;
tzyb;
tzxb=zeros(length(tzyb));
plot(lgxb,lgyb,'m*',tzxb,tzyb,'c*')
gtext('猎狗')
gtext('兔子')
当猎狗速度为18m/s时:
c=200;
a=8;
b=18;
lgxb=[];lgyb=[];tzxb=[];tzyb=[];
d=1;
dt=0.1;
t=0;
lgx=c;lgy=0;tzx=0;tzy=0;
holdon
axis([0,200,0,150])
title('猎狗追兔子')
text(0,120,'洞口A')
text(200,0,'B')
text(0,0,'O')
while(sqrt((lgx-tzx)^2+(lgy-tzy)^2)>d)
t=t+dt;
lgx=lgx-b*dt*lgx/sqrt(lgx^2+(a*t-lgy)^2);
lgxb=[lgxb,lgx];
lgy=lgy+b*dt*(a*t-lgy)/sqrt(lgx^2+(a*t-lgy)^2);
lgyb=[lgyb,lgy];
tzy=a*t;
tzyb=[tzyb,tzy];
end
lgxb;
lgyb;
tzyb;
tzxb=zeros(length(tzyb));
plot(lgxb,lgyb,'m*',tzxb,tzyb,'c*')
gtext('猎狗')
gtext('兔子')
2.问题(4)的程序(此为对猎狗速度b进行多次修正后的程序);
a=8;
b=15.4;
dt=0.1;
t=0;
s=0;
D=30;
d=1;
e=0;
lgx=200;lgy=0;tzx=0;tzy=0;
holdon
axis([0,200,0,150])
title('猎狗追兔子')
text(0,120,'洞口A')
text(200,0,'B')
text(0,0,'O')
while(sqrt((lgx-tzx)^2+(lgy-tzy)^2)>d)
if(sqrt((lgx-tzx)^2+(lgy-tzy)^2)>D)
t=t+dt;
lgx=lgx-b*dt*lgx/sqrt(lgx^2+(a*t-lgy)^2);
lgy=lgy+b*dt*(a*t-lgy)/sqrt(lgx^2+(a*t-lgy)^2);
tzy=tzy+a*dt;
plot(lgx,lgy,'r*',tzx,tzy,'b*')
pause(0.1)
else
t=t+dt;
if(e==0||e==1)
a=a/2;
b=1.1*b;
e=0;
end
e=e+dt;
lgx=lgx-b*dt*lgx/sqrt(lgx^2+(tzy+a*dt-lgy)^2);
lgy=lgy+b*dt*(tzy+a*dt-lgy)/sqrt(lgx^2+(tzy+a*dt-lgy)^2);
tzy=tzy+a*dt;
plot(lgx,lgy,'r+',tzx,tzy,'b+')
pause(0.1)
end
s=s+b*dt;
end
gtext('猎狗')
gtext('兔子')
lgx,lgy,tzx,tzy,t,s
四.上机实验的结果与结论
1.问题
(1)~(3):
lgx=0.0110
lgy=118.9382
tzx=0
tzy=119.2000
t=14.9000
s=253.300
结论:
(1)猎狗能追上兔子的最小速度是17米/秒;
(2)在猎狗能追上兔子的情况下,猎狗跑过的路程是253.3米;
(3)猎狗追赶兔子奔跑的曲线图
2.问题(4):
lgx=-0.0026
lgy=119.24
tzx=0
tzy=119.2000
t=16.0000
s=249.7880
结论:
猎狗追赶兔子奔跑的曲线图如下:
五.实验的总结与体会
通过这次实验,我们小组人员对微分方程的模型实验有一定的了解,由于此实验和之前的缉私船追赶走私船实验基本相同,只是将实验的坐标轴进行旋转即可,所以整体实验过程都比较简单,小组人员都对其表示比较熟悉。