狗追兔子问题

温柔似野鬼°
754次浏览
2020年09月14日 09:40
最佳经验
本文由作者推荐

亲爱英文-中秋节资料


实验三

实验问题:
如图所示,有一个猎狗在B点位置发现了一只 兔子正东北方距
离它200米的地方O处,此时兔子开始一8米秒的速度正西北方距
离位120 米的洞口A全速跑去,假设猎狗在追逐兔子的时候始终朝着
兔子的方向全速奔跑,,按要求完成下面的实 验:
(1) 问猎狗能追上兔子的最小速度是多少?
(2) 在猎狗能追上兔子的情况下,猎狗跑过的路程是多少?
(3) 画出猎狗追赶兔子奔跑的曲线图。
(4) 假设在追赶过程中,当猎狗与兔子之间的距离为30米
时,兔子由于害怕, 奔跑的速度每秒减半,而猎 狗却由于兴奋奔跑的
速度每秒增加0.1倍,在这种情况下,再按前面的(1)—(3)完成
实 验任务。

问题分析:
此题是以缉私船追赶走私船为背景的一道数学追击问题。
理论基础:
(x
设t时刻狗的位置:

xk

y
k

追赶方向
k
,y
k
)
, 兔子的位置是:
可用方向余弦表示为:
cos

k

xk
x
k
(
x
k
x
k
)(yk
y
k
)
22

sin

k

y
k
y
k
(
x
k
x
k< br>)(y
k
y
k
)
22


取时间步长为△t,则在t+△t时,狗的位置
(
x
k1
,y
k< br>1
)
,可表示为:

x
k1
x
k< br>x
k
btcos

k
,y
k1
y
k
y
k
btsin

k
之后比较追击点的纵坐标与兔子洞的纵坐标,以判断是否可以追
上。
在第一问中,利用狗的速 度的循环,以是否能在规定范围内追击
到为限制条件,找出能追击到的最小速度,作为狗的最小速度。在 循
环的过程中,避免超出界限而造成无限循环。
运用了if语句,对是否可以追击到进行了选择,以达到预期的
筛选目标。

程序设计流程图:

.建立狗与兔子的横纵坐标的数组对兔子和狗的坐标赋初值并 赋
值变量按照狗速度的可能值设定循环范围循环的条件(即追击住
的条件)按照数学理论 基础编写循环内容判断是否能在入洞追击
住①是,则退出循环,此时的速度即为狗的最小速度②否 ,速度
递加,再次进行循环输出狗的最小速度

输入狗的速度对坐标以及一些重 要的变量进行初始化赋值进
入循环,循环的条件是是否追击上兔子并且循环中追击的纵坐标不超
过兔子洞的纵坐标按照数学理论基础编写循环内容循环结束
if语句判断追击情况①追击过程 中追击的纵坐标超过兔子洞的
纵坐标,说明在规定距离没有追上,则输出速度太小②追击点的纵
坐标不超过兔子洞的纵坐标,说明在规定距离内兔子被追到了,则输


出追击时间与兔子 的逃跑路程


根据上面运算时的得到的四个数组,可以画出追击图来


程序内容:
第一问:
a=8;
dogxa=[];cabbitxa=[];dogya=[];cabbitya=[];
d=1;
dogx=-100*sqrt(2);dogy=-100*sqrt(2);c abbitx=0;cabbity
=0;
t=0;
dt=0.01;
for b=10:0.5:40
dogx=-100*sqrt(2);do gy=-100*sqrt(2);cabbitx=0;cabbity
=0;
t=0;
while(sqrt((dogx-cabbitx)^2+(dogy- cabbity)^2)>d&cabbi
ty<200)
t=t+dt;
dogx=dogx+b*dt*(cabbitx-dogx)sqrt((dogx- cabbitx
)^2+(dogy-cabbity)^2);

dogy=dogy+b*dt*(cabbity-dogy)sqrt((dogx- cabbitx
)^2+(dogy-cabbity)^2);
cabbitx=-a*cos(pi4)*t;
cabbity=a*sin(pi4)*t;
end
if cabbity<=60*sqrt(2)
break
end
end
fprintf('the minspeed of dog id:%2f',b);

第二问:
a=8;
b=17;
d=0.1;
dogxb=[];cabbitxb=[];dogyb=[];cabbityb=[];


dogx=-100*sqrt(2);dogy=-100*sqrt(2);cabbit x=0;cabbity
=0;
t=0;
dt=0.01;
s=0;
while(sqrt((dogx-cabbitx)^2+(dogy- cabbity)^2)>d)
t=t+dt;
dogx0=dogx;
dogy0=dogy;

dogx=dogx+b*dt*(cabbitx-dogx)sqrt((cabbitx- dogx)^2+(
cabbity-dogy)^2);
dogxb=[dogxb,dogx];

dogy=dogy+b*dt*(cabbity-dogy)sqrt((cabbitx- dogx)^2+(
cabbity-dogy)^2);
dogyb=[dogyb,dogy];
cabbitx=-a*cos(pi4)*t;
cabbity=a*sin(pi4)*t;
cabbitxb=[cabbitxb,cabbitx];
cabbityb=[cabbityb,cabbity];
s=s+sqrt((dogx0-dogx)^2+(dogy0-dogy)^2);
end
fprintf('the length dog run is:%.1f',s);

第三问:

plot(dogxb,dogyb,cabbitxb,cabbityb,'*')

第四问:

a=8;
dogxa=[];cabbitxa=[];dogya=[];cabbitya=[];
d=1;
dogx=-100*sqrt(2);dogy=-100*sqrt(2);c abbitx=0;cabbity
=0;
t=0;
dt=0.01;
for b=8:0.5:40

dogx=-100*sqr t(2);dogy=-100*sqrt(2);cabbitx=0;cabbity
=0;
t=0;
c=b;


a=8;
while(sqrt((dogx-cabbitx)^2+(dogy- cabbity)^2)>d&cabbi
ty<60*sqrt(2))
if(sqrt((dogx-cabbitx)^2+(dogy-cabbity)^2)<=30)
b=b*1.1^dt;
a=a*0.5^dt;
end
t=t+dt;

dogx=dogx+b*dt*(cabbitx- dogx)sqrt((dogx-cabbitx)^2+(
dogy-cabbity)^2);

dogy=dogy+b*dt*(cabbity- dogy)sqrt((dogx-cabbitx)^2+(
dogy-cabbity)^2);
cabbitx=cabbitx-a*dt*cos(pi4);
cabbity=cabbity+a*sin(pi4)*dt;;
end
if (cabbity<=60*sqrt(2))
b=c;
break
end

end
fprintf('the minspeed of dog is:%2f',b);



a=8;
b=15.5;
dogxb=[];cabbitxb=[];dogyb=[];cabbityb=[];
dogx=-100*sqrt(2);dogy=-100*sqrt(2);cabbitx=0;cab bity
=0;
t=0;
dt=0.01;
s=0;
while(sqrt((dogx-cabbitx)^2+(dogy- cabbity)^2)>d)
t=t+dt;

if(sqrt((dogx-cabbitx)^2+(dogy- cabbity)^2)<=30)
b=b*1.1^dt;
a=a*0.5^dt
end
dogx0=dogx;
dogy0=dogy;



dogx=dogx+b*dt*(cabbitx-dogx)sqrt((cabbitx- dogx)^2+(
cabbity-dogy)^2);
dogxb=[dogxb,dogx];

dogy=dogy+b*dt*(cabbity-dogy)sqrt((cabbitx- dogx)^2+(
cabbity-dogy)^2);
dogyb=[dogyb,dogy];
cabbitx=cabbitx-a*dt*cos(pi4);
cabbity=cabbity+a*sin(pi4)*dt;
cabbitxb=[cabbitxb,cabbitx];
cabbityb=[cabbityb,cabbity];
s=s+sqrt((dogx0-dogx)^2+(dogy0-dogy)^2);
end
fprintf('the length dog run is:%.1f',s);


plot(dogxb,dogyb,cabbitxb,cabbityb,'*')


结果:
第一问:



第二问:



第三问:


第四问:





结果分析与结论:
狗的最小速度为17米秒,路程为110.5m。
当狗受到激励时,狗的最小速度为15.5米秒,路程为250.4。

总结与体会:
1. 许多数学公式的符号十分难输入,致使数学理论表述十分困
难。
2. 需要输入的数据太多,容易出现输入错误,特别是容易遗漏标
点符号.
3. 从编程过程中一开始盲目的套用公式,不仔细理解公式的内
涵,导致公式简单套用,结果与事实不符,经 编程后,认识
到了理解与运用的重要性。
4. 在设立循环条件的时候,没有考虑条件可达到 的精确度范围,
致使循环总是出现无限循环的情况,经检查后改正。
收获:
1.可 以更加熟练的运用Matlab解决一些问题,对用Matlab编程
有了更加深刻的了解。
2.懂得了使用数学软件求解极限,积分等问题的方法.
3.对于追击问题的数学模型有了一定的了解,并能简单的运用。
4.对遇到的一些编程问题有了切身的解决办法,提高了自己的编
程能力。
5.学会并提升了把实际问题转换成数学模型的数学建模的能力。


6.学会了 图像的绘制,数组的建立与扩充的办法,可以自己独立
绘图或建立数组。
while())

豆你玩-活动策划书范文


2016年七夕-大学生自我评价范文


小学生暑假日记-创业策划书


开斋节放假-电子科大研招网


大屿山-香港大学排名


中秋节的来历简介-小学生语文手抄报


福建专升本成绩查询-面试自我介绍演讲稿


北京市人才网-我也追星作文