数学建模四人追击问题论文
- 格式:doc
- 大小:404.50 KB
- 文档页数:7
一、对《数学实践与建模》课程的讲义、授课容、授课方式等的看法、建议:
还没开始上这门课的时候,我就经常听到数学建模这个词,谁谁谁参加数学建模比赛了之类的。当时并没有多想,感觉数学建模什么的估计就是类似奥数竞赛一类的解难题吧。没想到这学期开了这门课,通过这门课让我对数学建模有了一个更清晰直观的认识。
这么几周的课上下来,我觉得这门课还是很有意思的,对于这门课,我有一下一些建议:
1、第一节课可以先去机房上一次实验课,让大家先试试手,这样
利于后期课堂教学的开展;
2、可以建立一个QQ群,让大家相互讨论,这样也可以充分利用好
那些有数学建模基础同学的资源;
3、大家自己弄MATLAB软件不是太方便,希望学校或者老师在软件
的获取上给予一定的帮助;
4、实验课的时候进行分组,一个基础好的同学和几个没什么基础
的同学为一组,这样可以提高整个小组成员的学习效率。
有的建议可能不好实施,所以以上是我从个人想法观点出发的几点小建议。
二、题目:
四人追逐实验
三、摘要:
这是一个关于动态追击的问题,每个人都在运动,而且每个人的运动状态是相同的。问题主要在于,每个人的运动状态都在时时刻刻改变着,这是分析这个问题的关键点。通过初步判断,四个人最终会相遇在同一点,并且四个人的运动具有对称性,我们可以通过使追及过程离散化的方法来模拟四人的追及过程,即以极短的时间段为间隔,逐步分析四人的运动状况。
四、问题重述:
在正方形ABCD的四个顶点各有一个人。设在初始时刻时,四人同时出发匀速以沿顺时针走向下一个人。如果他们始终对准下一个人为目标行进,最终结果会如何。作出各自的运动轨迹。
五、模型假设:
1、将四个人看成质点a、b、c、d,设他们的初始位置分别为(0,0)(即坐标原点O)、 (0,1)、 (1,1)、 (1,0),如图1所示。
2、假设某人追上其目标的要该者与其目标间的距离足够小。我们不妨将该临界距离设为0.005个单位(该值为初始距离的0.5%)。
3、假设当中a、b、c、d某人已追到其目标时,该追及活动终止,即运动结束。若此时恰巧其他三人也追到各自目标,则称这种情况为四人追到一起。否则的话,称四人不能追到一起。
4、在追及过程中,四人可以在正方形区域进行运动,并不是只能在正方形的边长上运动。
5、在开始运动时和追及过程中,每个人时刻朝着目标运动不受限制。
6、根据分析,可以假设连续的时间被分为多个极小且等长的时间段。又因为时间间隔极短,所以四人在时间的运动均可视为直线运动。
六、模型的建立与求解:
本题求解的关键在于运用算法求出若干个dt时间后a、b、c、d 四人的位置坐标,并计算相应追逐者间的距离。记经过k个dt时间后,a、b、c、d位置点分别为k A、k B、k C、k D。故本题转化为
求k A、k B、k C、k D的坐标,以及
的值。下面,逐步分析四人的运动状况。
010x
①运动开始时,a 、b 、c 、d 四人同时分别朝着各自目标沿向量00B A 、00C B 、00D C 、00A D 的方向运动。
②经过1个dt 时间后,a 由0A 运动到1A ,b 由0B 运动到1B ,c 由0C 运动到1C ,d 由0D 运动到1D 。
③此时a 、b 、c 、d 都要转变方向同时分别沿向量11B A 、11C B 、11D C 、11A D 方向追及b 、c 、d 、a 。
④经过2个dt 时间后,a 、b 、c 、d 又分别由1A 、1B 、1C 、1D 运动到2A 、2B 、2C 、2D 。
⑤此时a 、b 、c 、d 需再次调整方向同时分别沿向量22B A 、
22C B 、22D C 、22A D 方向追及b 、c 、d 、a 。
⑥照此循环下去,直到某两者之间的距离足够小,即这时两个人追到一起,该程序活动终止。以上过程如图2所示。
因此,我们可以用向量递推的方法来求出k A 、k B 、k C 、k D 的
坐标,即向量k OA 、k OB 、k OC 、k OD 的坐标。记a 、b 、c 、d 四者的速率分别为1v 、2v 、3v 、4v 。
00B A =0OB -0OA ; 00C B =0OC -0OB
00D C =0OD -0OC ; 00A D =0OA -0OD
通过对1个dt 时间、2个dt 时间、3个dt 时间一直到k 个dt 时间后的分析,可以得到:
1111---⨯⨯+=+=k k k k k B A dt v OA A A OA
OA 2111---⨯⨯+=+=k k k k k C B dt v OB B B OB
OB 3111---⨯
⨯+=+=k k k k k dt v OC C C OC
OC 4111---⨯
⨯+=+=k k k k k A D dt v OD D D OD OD k k B A =k OB -k OA ; k k C B =k OC -k OB
k k D C =k OD -k OC ; k k A D =k OA -k OD
所以接下来我们可以进行MATLAB 的编程。
MATLAB 程序如下:
clear;clf;
A=[0,0];B=[0,1];C=[1,1];D=[1,0];
k=0;
dt=0.004;v=1;
grid;
hold on;
axis([0 1 0 1]);
while k<10000
k=k+1;
plot(A(1),A(2),'g.');
plot(B(1),B(2),'r.');
plot(C(1),C(2),'y.');
plot(D(1),D(2),'b.');
e1=(B-A)/norm(B-A);
A=A+v*dt*e1;
e2=(C-B)/norm(C-B);
B=B+v*dt*e2;
e3=(D-C)/norm(D-C);
C=C+v*dt*e3;
e4=A-v*dt*e1-D;d4=norm(e4);
e4=e4/d4;
D=D+v*dt*e4;
d1=norm(B-A);
d2=norm(C-B);
d3=norm(D-C);
d4=norm(A-D);
fprintf('k=%.0f d1=%.4f d2=%.4f d3=%.4f d4=%.4f\n',k,d1,d2,d3,d4); fprintf('A(%.2f,%.2f) B(%.2f,%.2f) C(%.2f,%.2f) D(%.2f,%.2f)\n', A(1),A(2),B(1),B(2),C(1),C(2),D (1),D(2));
if d1<=0.005
break
end
if d2<=0.005
break
end
if d3<=0.005
break
end
if d4<=0.005
break
end
pause(0.01)
end
最终获得的图像如下图所示: