关于四人追及问题的数学实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
关于四人追及问题的数学实验报告
———西安交通大学管理学院
ACCA92 爆米花小组
2021年2月一、实验问题
在一边长为1的正方形跑道的四个顶点上各站有1人,他们同时开始以等速顺时针追逐下一人,在追及过程中,每个人时刻对准目标,试模拟追及路线。
并讨论:
(1)四个人能否追到一起?
(2)假设能追到一起,那么每个人跑过多少路程?(3)追到一起所需要的时间〔设速率为1〕?
(4)如果四个人追逐的速度不一样,情况又如何呢?
二、问题分析
此题是一个动态追击问题,参考?MATLAB软件与根底数学实验?一书中65页的问题四,我们可以通过使追及过程离散化的方法来模拟四人的追及过程,即以极短的时间段dt为间隔,逐步分析四人的运动状况。
三、建模假设
a、b、c、d,设他们的初始位置分别为
A(0,0)(即坐标原点
O)、
B(0,1)、0C(1,1)、0D(1,0),如图1所示。
2.假设某人追上其目标的要求是该者与其目标间的距离足够小。
我们不妨将该临界距离设为0.005个单位〔该值为初始距离的0.5%〕。
3.假设当中a、b、c、d某人已追到其目标时,该追及活动终止,即运动结束。
假设此时恰巧其他三人也追到各自目标,那么称这种情况为四人追到一起。
否那么的话,称四人不能追到一起。
,四人可以在正方形区域内进行运动,并不是只能在正方形的边长上运动。
5.在开始运动时和追及过程中,每个人时刻朝着目标运动不受限制。
6.根据分析,可以假设连续的时间被分为多个极小且等长的时间段dt。
又因为时间间隔dt极短,所以四人在dt时间内的运动均可视为直线运动。
010x
四、建模求解
此题求解的关键在于运用算法求出假设干个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
的坐标,以及
、
、
、的值。
下面,逐步分析四人的运动状况。
图2
①运动开始时,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 时间后:
101001B A dt v OA A A OA OA ⨯⨯+=+=
201001C B dt v OB B B OB OB ⨯⨯+=+=
301001D C dt v OC C C OC OC ⨯⨯+=+=
401001A D dt v OD D D OD OD ⨯⨯+=+=
11B A =1OB -1OA ; 11C B =1OC -1OB
11D C =1OD -1OC ; 11A D =1OA -1OD
2个dt 时间后:
112112B A dt v OA A A OA OA ⨯⨯+=+=
212112C B dt v OB B B OB OB ⨯⨯+=+=
312112D C dt v OC C C OC OC ⨯⨯+=+=
412112A D dt v OD D D OD OD ⨯⨯+=+=
22B A =2OB -2OA ; 22C B =2OC -2OB
22D C =2OD -2OC ; 22A D =2OA -2OD
∶
∶
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 D C 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 如上所述,按照这样的交错递推方式,便可逐步求出k A 、
k B 、k C 、k D 的坐标,
以及
、
、
的值。
所以接下来的编程求解中,鉴于该命令集的重复执行,我们考虑用条件循环while-end 结构。
五、MATLAB 程序设计
说明:下面就四人的速率v 相等时的情况进行程序设计,四人的速率v 不等情况将在第七节“进一步拓展与实验〞中说明。
程序
clear;clf; %去除内存变量,清理图形窗口
A=[0,0];B=[0,1];C=[1,1];D=[1,0]; %设置四人初始位置
k=0; %设置累计计数变量k
dt=0.004;v=1; %设置时间间隔dt ,四人运动速率v grid; %绘制网格
hold on; %保持在同一窗口画图
axis([0 1 0 1]); %重置坐标轴
while k<10000 %开始循环
k=k+1; %循环次数累加1
plot(A(1),A(2),'g.'); %描出a 者的位置坐标
plot(B(1),B(2),'r.'); %描出b 者的位置坐标
plot(C(1),C(2),'y.'); %描出c 者的位置坐标
plot(D(1),D(2),'b.'); %描出d者的位置坐标
e1=(B-A)/norm(B-A); %求出a追b的方向向量
A=A+v*dt*e1; %求出经过一个dt时间后a的位置
e2=(C-B)/norm(C-B); %求出b追c的方向向量
B=B+v*dt*e2; %求出经过一个dt时间后b的位置
e3=(D-C)/norm(D-C); %求出c追d的方向向量
C=C+v*dt*e3; %求出经过一个dt时间后c的位置
e4=A-v*dt*e1-D;d4=norm(e4); %计算出d与a间距离
e4=e4/d4; %求出d追a的方向向量
D=D+v*dt*e4; %求出经过一个dt时间后d的位置
d1=norm(B-A); %计算出a与b间距离
d2=norm(C-B); %计算出b与c间距离
d3=norm(D-C); %计算出c与d间距离
d4=norm(A-D); %计算出d与a间距离
fprintf('k=%.0f d1=%.4f d2=%.4f d3=%.4f d4=%.4f\n',k,d1,d2,d3,d4);
%显示累计数k,以及相应两者间距离 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 %判断a与b的位置是否足够小break%终止循环
end%结束判断
if d2<=0.005 %判断b与c的位置是否足够小break%终止循环
end%结束判断
if d3<=0.005 %判断c与d的位置是否足够小break%终止循环
end%结束判断
if d4<=0.005 %判断d与a的位置是否足够小break%终止循环
end%结束判断
pause(0.01) %放慢画图演示过程
end%结束循环
六、问题求解结果与结论
上述程序的运行结果:
∶
∶
k=250 d1=0.0102 d2=0.0102 d3=0.0102 d4=0.010 A(0.50,0.49) B(0.49,0.50)
C(0.50,0.51) D(0.51,0.50)
,0.50)
k=252 d1=0.0052 d2=0.0052 d3=0.0052 d4=0.0052 A(0.50,0.50) B(0.50,0.50) C(0.50,0.50) D(0.50,0.50)
k=253 d1=0.0042 d2=0.0042 d3=0.0042 d4=0.0042 A(0.50,0.50) B(0.50,0.50) C(0.50,0.50) D(0.50,0.50)
图3
程序的运行结果说明:
在四人的速率v相等的情况下:
①当运动结束时,a与b间距离、b与c间距离、c与d间距离、d与a间距离都已足够小〔小于初始距离的0.5%〕。
即运动结束时,a、b、c、d四人可以追到一起,都到达正方形中心(0.5,0.5)位置附近。
②整个运动过程经历的时间:
t=k⨯dt=253⨯2≈1
③从开始到结束,每个人跑过的路程:
s=v t=1
④四人运动的轨迹如图3所示。
其实,不难想像,由于四个人所处的位置关于正方形中心对称,且四人运动的速率相同,所以四人运动的轨迹也是时刻对称的,最后也应该同时停止在正方形的中心。
另外,值得一提的是,原程序设计的时间间隔dt为0.004个时间单位,运动停止的临界距离单位。
当然也可以根据需要更改这两个参数。
将dt和临界距离设置越小,得出的运行轨迹、时间t与路程s的值也会越精确。
比方,将dt 和临界距离逐渐改小,其对应的t值如下:
dt=0.004 d<0.005 2
dt=0.003 d<0.004 08
dt=0.002 d<0.003 4
dt=0.001 d<0.002 t=2
∶
∶
由上可以看出,整个运动过程所用时间t在逐渐趋近于1个单位,因而我们可以合理地推断,四人完全重合在一起所花的时间应该是1个时间单位整,而每个人跑过的路程也应该是1个距离单位。
七、进一步拓展与实验
下面就四人追逐速度不一样的情况〔即问题〔4〕〕进行编程与探究。
虽然四人的速率不一样,但是依然可用向量递推的方法求解,编程时只需要将原式中v的分别改成v1、v1、v3、v4即可。
程序编写如下:
clear;clf; %去除内存变量,清理图形窗口
v1=input('v1=') %输入a的运动速率
v2=input('v2=') %输入b的运动速率
v3=input('v3=') %输入c的运动速率
v4=input('v4=') %输入d的运动速率
A=[0,0];B=[0,1];C=[1,1];D=[1,0]; %设置四人初始位置
k=0; dt=0.004; %设置累计计数变量k,时间间隔dt grid; %绘制网格
hold on; %保持在同一窗口画图
axis([0 1 0 1]); %重置坐标轴
while k<10000 %开始循环
k=k+1; %循环次数累加1
plot(A(1),A(2),'g.'); %描出a者的位置坐标
plot(B(1),B(2),'r.'); %描出b者的位置坐标
plot(C(1),C(2),'y.'); %描出c者的位置坐标
plot(D(1),D(2),'b.'); %描出d者的位置坐标
e1=(B-A)/norm(B-A); %求出a追b的方向向量
A=A+v1*dt*e1; %求出经过一个dt时间后a的位置
e2=(C-B)/norm(C-B); %求出b追c的方向向量
B=B+v2*dt*e2; %求出经过一个dt时间后b的位置
e3=(D-C)/norm(D-C); %求出c追d的方向向量
C=C+v3*dt*e3; %求出经过一个dt时间后c的位置
e4=A-v1*dt*e1-D;d4=norm(e4); %计算出d与a间距离
e4=e4/d4; %求出d追a的方向向量
D=D+v4*dt*e4; %求出经过一个dt时间后d的位置
d1=norm(B-A); %计算出a与b间距离
d2=norm(C-B); %计算出b与c间距离
d3=norm(D-C); %计算出c与d间距离
d4=norm(A-D); %计算出d与a间距离
fprintf('k=%.0f d1=%.4f d2=%.4f d3=%.4f d4=%.4f\n',k,d1,d2,d3,d4);
%显示累计数k,以及相应两者间距离 fprintf('A(%.2f,%.2f) B(%.2f,%.2f) C(%.2f,%.2f)
D(%.2f,%.2f)\n',A,B,C,D);
%显示四者坐标
if d1<0.005 %判断a与b的位置是否足够小break%终止循环
end%结束判断
if d2<0.005 %判断b与c的位置是否足够小break%终止循环
end%结束判断
if d3<0.005 %判断c与d的位置是否足够小break%终止循环
end%结束判断
if d4<0.005 %判断d与a的位置是否足够小break%终止循环
end%结束判断
pause(0.01) %放慢画图演示过程
end%结束循环
该程序中可分别改变v1、v1、v3、v4初始值的大小来研究不同速率带来的情况变化。
下面我们对以下几种情况进行研究:
①保持三者速率不变,只改变另一人速率的值。
不妨保持v1=v2=v3=1,仅改变v4的值。
我们可以取多组v4的值进行探究,运行结果如下:
v4=4时
该组数据说明运动结束时,仅有d(速率为v4)追上a
v4=2时
该组数据说明运动结束时,仅有d(速率为v4)追上a
v4=时
该组数据说明运动结束时,d(速率为v4)追上a,且b追上c
v4=时
该组数据说明运动结束时,a、b、c、d都追上各自目标,即四人追到一起
从上面4组数据中,我们看到了不同的结果,并可以发现,随着v4的值与其他三者的值越来越接近,运动结束时四者的距离也越来越接近。
当v4=时,a、b、c、d甚至都追上各自目标,即四人追到一起。
但是,我们在v4=的情况下把dt的值由原来的改为个单位时,却得到了如下的结果:
当v4=时
k=9928
即此时a、b、d都追上各自目标,但是c并没有追上d,即四人并没有追到一起
我们惊奇地发现,在四人速率不变的情况下,仅仅改变dt的值,却得到了不一样的结果!
在其他情况下我们也发现了类似结果:
②保持两者速率不变,改变另外两者的值。
当v1=v2=1,,时
该组数据说明运动结束时,a、b、c、d都追上各自目标,即四人追到一起
当v1=v2=1,,时
即此时a、b都追上各自目标,但是c、d并没有追上各自目标,即四人并没有追到一起
③四者速度全部不同时。
当v1=1,v2=1.01,2,v4=1.03,时
该组数据说明运动结束时,a、b、c、d都追上各自目标,即四人追到一起
当v1=1,v2=1.01,2,v4=1.03,时
该组数据说明运动结束时, a、b都追上各自目标,但是c、d并没有追上各自目标,即四人并没有追到一起
针对以上出现的在四人速率不变的情况下,仅仅改变dt 的值,却得到了不一样的结果的现象,我们进行分析讨论,发现这是因为用离散化求解的方法无法防止地忽略了运动
的连续性,即它只能粗略地表现质点在时间段之间的变化,却不能细致描绘出质点在时间段之内的情况。
也就是说,采用离散化的手法后,四者的运动过程是呈跳跃状的。
可能经过n个dt时间单位时,他们所有的人离自己目标的距离是大于临界值的,经过n+1个dt时间单位时,他们所有的人离自己目标的距离就小于临界值了。
这时,看上去,他们都追上了自己的目标,即四人追到了一起。
但是,如果把时间间隔再细分,比方把原来的一个dt再次100等分,每份记作t d'。
那么,由于速率不一样,可能经过k个t d'时间单位,他们彼此的差距大于临界值,但是在经过k+1个t d'时间单位后,有可能只有一个人与自己目标的距离小于临界值,其他三者与目标间距离并未小于临界值,而此时根据假设3运动已停止,但四人并未追到一起。
因此,我们猜想,即使四者的速率相差的再小,只要将时间间隔设定的足够小,一定会有存在有人追上自己的目标,而另外的人没有追上自己目标的时刻。
换言之,只要四人速率不一样,无论速率多么接近,四人都不会追到一起。
速率不一样是四人追不到一起的根本原因!
虽然在速率不等时四人不能追到一起,但是我们还发现,有可能同时存在两个人追到各自目标的现象。
即为下述情况:
④令a、c两者速度相等,b、d两者速度也相等。
当v1=v3=1,v2=v4=2时,运行结果如下:
∶
∶
图4
上述结果说明,运动结束时b、d同时追到各自目标〔经检验,即使将时间间隔dt变小,情况依然不变〕。
我们猜想,之所以他们能同时追到各自目标,是由于a、c两者速率相等,b、d两者速率也相等。
且b与c组成的单元与d与a 组成的单元时刻关于正方形中心对称。
这样这两组单元才会
同时运动且同时停止。
另外,我们在保持四人速率相等的情况下屡次更改了四人的初始位置,每次都使
A、0B、0C、0D构成一个非正方
形的任意四边形。
运行程序后,我们发现每次四人都无法追到一起。
我们分析了这种情况后认为,这是由于四人所处的初始位置并没有关于某点轮换对称造成的,从而猜想只有在四人初始位置点构成一个正方形时,他们才能追到一起。
八、实验的总结与体会
爆米花小组于2021年1月22日成立,成员如下:崔雨竹〔09085032〕谭慧曼〔09085041〕严珞诗〔09085057〕
小组成员在2021年1月至2月期间以网际交流的方式针对?MATLAB软件与根底数学实验?一书中68页的问题4——“四人追及问题〞进行了研究与讨论,并将该问题的研究成果按要求写成此份报告。
本次假期中的数学实验活动让我们从理论知识到思想观念上都有了不小收获。
首先,我们认为数学实验可以帮助我们学会利用数学知识建立数学模型,通过思考与研究加强对自然规律的认识,增强解决实际问题的能力。
然后,我们感到了能在一个团队中与队友合作完成任务
是非常可贵的。
个人的思想总会有缺陷,个人的能力总是有极限。
而在一个团队中通过自由的交流讨论与合作正可以弥补个人的缺乏。
每位队友能结合自己的长处与能力的付出就会让团队向共同目标迈出一大步。
同时,我们还意识到对于任何问题都要抱着锲而不舍的态度去钻研,对于问题要从多角度去思考。
这种敢于探究的精神会鼓励我们不断实践、不断进步。
最后,感谢小组成员们为本次研究所付出的努力!
2021年2月。