实验三实验问题:如图所示,有一个猎狗在B 点位置发现了一只兔子正东北方距离它200米的地方O 处,此时兔子开始一8米/秒的速度正西北方距离位120米的洞口A 全速跑去,假设猎狗在追逐兔子的时候始终朝着兔子的方向全速奔跑,,按要求完成下面的实验:(1) 问猎狗能追上兔子的最小速度是多少?(2) 在猎狗能追上兔子的情况下,猎狗跑过的路程是多少?(3) 画出猎狗追赶兔子奔跑的曲线图。
(4) 假设在追赶过程中,当猎狗与兔子之间的距离为30米时,兔子由于害怕, 奔跑的速度每秒减半,而猎狗却由于兴奋奔跑的速度每秒增加0.1倍,在这种情况下,再按前面的(1)—(3)完成实验任务。
问题分析:此题是以缉私船追赶走私船为背景的一道数学追击问题。
理论基础:设t 时刻狗的位置: ,兔子的位置是:(,k y )追赶方向可用方向余弦表示为:22)()(cos k k k k k k k y y x x x x -+--=α 22)()(sin k k k k k k k y y x y y x -+--=α),(k k y x取时间步长为△t ,则在t+△t 时,狗的位置),(11++k k y x ,可表示为:之后比较追击点的纵坐标与兔子洞的纵坐标,以判断是否可以追上。
在第一问中,利用狗的速度的循环,以是否能在规定范围内追击到为限制条件,找出能追击到的最小速度,作为狗的最小速度。
在循环的过程中,避免超出界限而造成无限循环。
运用了if 语句,对是否可以追击到进行了选择,以达到预期的筛选目标。
程序设计流程图:⑴.建立狗与兔子的横纵坐标的数组→对兔子和狗的坐标赋初值并赋值变量→按照狗速度的可能值设定循环范围→循环的条件(即追击住的条件)→按照数学理论基础编写循环内容→判断是否能在入洞追击住→①是,则退出循环,此时的速度即为狗的最小速度→②否,速度递加,再次进行循环→输出狗的最小速度⑵输入狗的速度→对坐标以及一些重要的变量进行初始化赋值→进入循环,循环的条件是是否追击上兔子并且循环中追击的纵坐标不超过兔子洞的纵坐标→按照数学理论基础编写循环内容→循环结束→if 语句判断追击情况→①追击过程中追击的纵坐标超过兔子洞的纵坐标,说明在规定距离没有追上,则输出速度太小→②追击点的纵坐标不超过兔子洞的纵坐标,说明在规定距离内兔子被追到了,则输 ∆≈∆=-+,cos 1k k k k t b x x x αk k k k t b y y y αsin 1∆≈∆=-+出追击时间与兔子的逃跑路程⑶根据上面运算时的得到的四个数组,可以画出追击图来程序内容:第一问:a=8;dogxa=[];cabbitxa=[];dogya=[];cabbitya=[];d=1;dogx=-100*sqrt(2);dogy=-100*sqrt(2);cabbitx=0;cabbity =0;t=0;dt=0.01;for b=10:0.5:40dogx=-100*sqrt(2);dogy=-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(pi/4)*t;cabbity=a*sin(pi/4)*t;endif cabbity<=60*sqrt(2)breakendendfprintf('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);cabbitx=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(pi/4)*t;cabbity=a*sin(pi/4)*t;cabbitxb=[cabbitxb,cabbitx];cabbityb=[cabbityb,cabbity];s=s+sqrt((dogx0-dogx)^2+(dogy0-dogy)^2);endfprintf('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);cabbitx=0;cabbity =0;t=0;dt=0.01;for b=8:0.5:40dogx=-100*sqrt(2);dogy=-100*sqrt(2);cabbitx=0;cabbity =0;t=0;c=b;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;endt=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(pi/4);cabbity=cabbity+a*sin(pi/4)*dt;;endif (cabbity<=60*sqrt(2))b=c;breakendendfprintf('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;cabbity =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^dtenddogx0=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(pi/4);cabbity=cabbity+a*sin(pi/4)*dt;cabbitxb=[cabbitxb,cabbitx];cabbityb=[cabbityb,cabbity];s=s+sqrt((dogx0-dogx)^2+(dogy0-dogy)^2);endfprintf('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())。