您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 关于四人追及问题的数学实验报告
关于四人追及问题的数学实验报告———西安交通大学管理学院ACCA92爆米花小组2010年2月一、实验问题在一边长为1的正方形跑道的四个顶点上各站有1人,他们同时开始以等速顺时针追逐下一人,在追及过程中,每个人时刻对准目标,试模拟追及路线。并讨论:(1)四个人能否追到一起?(2)若能追到一起,则每个人跑过多少路程?(3)追到一起所需要的时间(设速率为1)?(4)如果四个人追逐的速度不一样,情况又如何呢?图1二、问题分析本题是一个动态追击问题,参考《MATLAB软件与基础数学实验》一书中65页的问题四,我们可以通过使追及过程离散化的方法来模拟四人的追及过程,即以极短的时间段dt为间隔,逐步分析四人的运动状况。xy三、建模假设1.将四个人看成质点a、b、c、d,设他们的初始位置分别为0A(0,0)(即坐标原点O)、0B(0,1)、0C(1,1)、0D(1,0),如图1所示。2.假设某人追上其目标的要求是该者与其目标间的距离足够小。我们不妨将该临界距离设为0.005个单位(该值为初始距离的0.5%)。3.假设当中a、b、c、d某人已追到其目标时,该追及活动终止,即运动结束。若此时恰巧其他三人也追到各自目标,则称这种情况为四人追到一起。否则的话,称四人不能追到一起。4.在追及过程中,四人可以在正方形区域内进行运动,并不是只能在正方形的边长上运动。5.在开始运动时和追及过程中,每个人时刻朝着目标运动不受限制。6.根据分析,可以假设连续的时间被分为多个极小且等长的时间段dt。又因为时间间隔dt极短,所以四人在dt时间内的运动均可视为直线运动。四、建模求解本题求解的关键在于运用算法求出若干个dt时间后a、b、c、d四人的位置坐标,并计算相应追逐者间的距离。记0A1B2B3B4B5B4A5A3A2A1D0C0D1A1C2C2D3C3D4C4D5C5D0Bxy经过k个dt时间后,a、b、c、d位置点分别为kA、kB、kC、kD。故本题转化为求kA、kB、kC、kD的坐标,以及kkBA、kkCB、kkDC、kkAD的值。下面,逐步分析四人的运动状况。图2①运动开始时,a、b、c、d四人同时分别朝着各自目标沿向量00BA、00CB、00DC、00AD的方向运动。②经过1个dt时间后,a由0A运动到1A,b由0B运动到1B,c由0C运动到1C,d由0D运动到1D。③此时a、b、c、d都要转变方向同时分别沿向量11BA、11CB、11DC、11AD方向追及b、c、d、a。④经过2个dt时间后,a、b、c、d又分别由1A、1B、1C、1D运动到2A、2B、2C、2D。⑤此时a、b、c、d需再次调整方向同时分别沿向量22BA、22CB、22DC、22AD方向追及b、c、d、a。⑥照此循环下去,直到某两者之间的距离足够小,即这时两个人追到一起,该程序活动终止。以上过程如图2所示。因此,我们可以用向量递推的方法来求出kA、kB、kC、kD的坐标,即向量kOA、kOB、kOC、kOD的坐标。记a、b、c、d四者的速率分别为1v、2v、3v、4v。00BA=0OB-0OA;00CB=0OC-0OB00DC=0OD-0OC;00AD=0OA-0OD1个dt时间后:0000101001BABAdtvOAAAOAOA0000201001CBCBdtvOBBBOBOB0000301001DCDCdtvOCCCOCOC0000401001ADADdtvODDDODOD11BA=1OB-1OA;11CB=1OC-1OB11DC=1OD-1OC;11AD=1OA-1OD2个dt时间后:1111112112BABAdtvOAAAOAOA1111212112CBCBdtvOBBBOBOB1111312112DCDCdtvOCCCOCOC1111412112ADADdtvODDDODOD22BA=2OB-2OA;22CB=2OC-2OB22DC=2OD-2OC;22AD=2OA-2OD∶∶k个dt时间后:11111111kkkkkkkkkBABAdtvOAAAOAOA11112111kkkkkkkkkCBCBdtvOBBBOBOB11113111kkkkkkkkkDCDCdtvOCCCOCOC11114111kkkkkkkkkADADdtvODDDODODkkBA=kOB-kOA;kkCB=kOC-kOBkkDC=kOD-kOC;kkAD=kOA-kOD如上所述,按照这样的交错递推方式,便可逐步求出kA、kB、kC、kD的坐标,以及kkBA、kkCB、kkDC、kkAD的值。所以接下来的编程求解中,鉴于该命令集的重复执行,我们考虑用条件循环while-end结构。五、MATLAB程序设计说明:下面就四人的速率v相等时的情况进行程序设计,四人的速率v不等情况将在第七节“进一步拓展与实验”中说明。程序编制:clear;clf;%清除内存变量,清理图形窗口A=[0,0];B=[0,1];C=[1,1];D=[1,0];%设置四人初始位置k=0;%设置累计计数变量kdt=0.004;v=1;%设置时间间隔dt,四人运动速率vgrid;%绘制网格holdon;%保持在同一窗口画图axis([0101]);%重置坐标轴whilek10000%开始循环k=k+1;%循环次数累加1plot(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=%.0fd1=%.4fd2=%.4fd3=%.4fd4=%.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));%显示四者坐标ifd1=0.005%判断a与b的位置是否足够小break%终止循环end%结束判断ifd2=0.005%判断b与c的位置是否足够小break%终止循环end%结束判断ifd3=0.005%判断c与d的位置是否足够小break%终止循环end%结束判断ifd4=0.005%判断d与a的位置是否足够小break%终止循环end%结束判断pause(0.01)%放慢画图演示过程end%结束循环六、问题求解结果与结论上述程序的运行结果:∶∶k=250d1=0.0102d2=0.0102d3=0.0102d4=0.010A(0.50,0.49)B(0.49,0.50)C(0.50,0.51)D(0.51,0.50)k=251d1=0.0073d2=0.0073d3=0.0073d4=0.0073A(0.50,0.49)B(0.49,0.50)C(0.50,0.51)D(0.51,0.50)k=252d1=0.0052d2=0.0052d3=0.0052d4=0.0052A(0.50,0.50)B(0.50,0.50)C(0.50,0.50)D(0.50,0.50)k=253d1=0.0042d2=0.0042d3=0.0042d4=0.0042A(0.50,0.50)B(0.50,0.50)C(0.50,0.50)D(0.50,0.50)00.20.40.60.8100.10.20.30.40.50.60.70.80.91图3程序的运行结果表明:在四人的速率v相等的情况下:①当运动结束时,a与b间距离、b与c间距离、c与d间距离、d与a间距离都已足够小(小于初始距离的0.5%)。即运动结束时,a、b、c、d四人可以追到一起,都到达正方形中心(0.5,0.5)位置附近。②整个运动过程经历的时间:t=kdt=2530.004=1.012≈1③从开始到结束,每个人跑过的路程:s=vt=1④四人运动的轨迹如图3所示。其实,不难想像,由于四个人所处的位置关于正方形中心对称,且四人运动的速率相同,所以四人运动的轨迹也是时刻对称的,最后也应该同时停止在正方形的中心。另外,值得一提的是,原程序设计的时间间隔dt为0.004个时间单位,运动停止的临界距离为0.005单位。当然也可以根据需要更改这两个参数。将dt和临界距离设置越小,得出的运行轨迹、时间t与路程s的值也会越精确。比如,将dt和临界距离逐渐改小,其对应的t值如下:dt=0.004d0.005t=1.012dt=0.003d0.004t=1.008dt=0.002d0.003t=1.004dt=0.001d0.002t=1.002∶∶由上可以看出,整个运动过程所用时间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,时间间隔dtgrid;%绘制网格holdon;%保持在同一窗口画图axis([0101]);%重置坐标轴whilek10000%开始循环k=k+1;%循环次数累加1plot(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)
本文标题:关于四人追及问题的数学实验报告
链接地址:https://www.777doc.com/doc-6184420 .html