一、 问题重述与分析 (一)问题描述
神秘的大自然里,处处暗藏杀机,捕猎和逃生对动物的生存起着至关重要的作用,而奔跑速度和路线是能否追上和逃生的关键因素。 狼追击兔子问题是欧洲文艺复兴时代的着名人物达.芬奇提出的一个数学问题。当一个兔子正在它的洞穴南面60码处觅食时,一只恶狼出现在兔子正东的100码处。当两只动物同时发现对方以后,兔子奔向自己的洞穴,狼以快于兔子一倍的速度紧追兔子不放。狼在追赶过程中所形成的轨迹就是追击曲线。狼是否会在兔子跑回洞穴之前追赶上兔子?
为了研究狼是否能够追上兔子,可以先考虑求出狼追兔子形成的追击曲线,然后根据曲线来确定狼是否能够追上兔子。 (二)问题分析
1、本题目是在限定条件下求极值的问题,可以通过建立有约束条件的微分方程加以模拟。
2、通过运用欧拉公式及改进欧拉公式的原理,结合高等数学的有关知识,对微分方程进行求解。
3、将数学求解用Matlab程序语言进行实现
得出方程的近似解。
4、最后解方程的解结合实际问题转化为具体问题的实际结果。 二、变量说明
v1:兔子的速度(单位:码/秒) r:狼与兔子速度的倍数;
v2:狼的速度(单位:码/秒),显然有v2rv1
t:狼追击兔子的时刻(t=0时,表示狼开始追兔子的时刻)
s1:在时刻t,兔子跑过的路程(单位:码),s1s1(t) s2:在时刻t,狼跑过的路程(单位:码),s2s2(t)
Q(x1,y1):表示在时刻t时,兔子的坐标 P(x,y):表示在时刻t时,狼子的坐标
三、模型假设
1、狼在追击过程中始终朝向兔子;
2、狼追击兔子的轨迹看作是一条光滑的曲线,即将动点P(x,y)的轨迹
看作一条曲线,曲线方程表示为yy(x)。
3、当猎狗与兔子之间的距离相当小时
认为猎狗已经追上了兔子。
四、模型建立 (一)建模准备
以t=0时,兔子的位置作为直角坐标原点,兔子朝向狼的方向为x轴正向;
则显然有兔子位置的横坐标x10。
对狼来说,当x=100,y=0,即yx1000
在t=0刚开始追击时,狼的奔跑方向朝向兔子,此时即x轴负方向, 则有yx1000
(二)建立模型 1、追击方向的讨论
由于狼始终朝向兔子,则在狼所在位置P(x,y)点过狼的轨迹处的切线方向在y轴上的截距为y1。
设切线上的动点坐标为(X,Y),则切线方程为
Yyy(Xx)(1)
在(1)中,令X=0,则截距Yyyx。 此时y1v1t。
则此时截距等于兔子所跑过的路程,即:
Yy1,
从而可得
Yy1yyx(2)
2、狼与兔子速度关系的建模 在t时刻,兔子跑过的路程为
s1y1v1t(3)
由于狼的速度是兔子的r倍,则狼跑的路程为
s2rs1ry1(4)
狼跑过的路程可以用对弧长的曲线积分知识得到,如下。
s2100x1y2dx(5)
联立(2)、(4)、(5)得
对(6)两边求对x的导数,化简得
100x1y2dxry1r(yyx)(6)
1y2(7) yrx微分方程(7)式的初始条件有: 3、是否追上的判断 要判定狼是否追上兔子, 可以通过(7)式判定。 对(7)式,
当x=0,如果计算求解得到y60,则视为没有追上; 当x=0,如果计算求解得到y60,则视为兔子被追上; 五、模型求解
由微分方程得到其Matlab函数 functionyy=odefunlt(x,y)
%以狼在追击过程中的横坐标为自变量 yy(1,1)=y(2);
yy(2,1)=sqrt(1+y(2).^2)./(2.*x); 主程序:
tspan=100:-0.1:0.1;%以狼的x坐标为自变量 y0=[00];
%下面只知道狼是否追上兔子,但是不易推得兔子刚刚到达窝边时,狼与兔之间的距离
[T,Y]=ode45('odefunlt',tspan,y0); n=size(Y,1);
disp('狼的坐标(x=0.1)')
disp(Y(n,1))%通过追击曲线计算当狼的横坐标为0.1(即tspan=0.1)时,狼的纵坐标 六、模型结果与分析 运行结果:
狼的坐标(x=0.1) 62.1932 通过上面运行结果可知,狼并没有追上兔子。 七、思考题
通过上面的结果已经知道狼并没有追上兔子。那么兔子跑回窝边时,狼与兔子之间的距离是多少?上面的程序不能解决此问题,那么用什么办法解决呢? (一)解决思路
可以对狼与兔子的追击过程通过计算机进行模拟,然后从模拟结果获取。
模拟程序如下,程序文件名sim_langtu.m: functionsim_langtu %《狼兔追击问题》 %(离散模拟)
%这里没有具体考虑狼、兔的具体速度
%主要通过二者的速度倍速关系及方向向量奔跑过程
Q=[00];%兔子坐标 P=[1000];%狼坐标 PQ=Q-P;%狼兔方向向量
step=1;%模拟步长:兔子奔跑的距离,step越小就越精确 count=60/step;%以兔子的奔跑距离划分 PQ=PQ/norm(PQ)*step;%归一化,单位向量 trackP=P; trackQ=Q; fork=1:count; P=P+2*PQ;%2倍速度
Q=Q+step*[01];%[01]为兔子奔跑方向的单位方向向量 PQ=Q-P;
trackP(1+k,:)=P; trackQ(1+k,:)=Q;
PQ=PQ/norm(PQ)*step;%归一化,单位向量 dis=sqrt(sum((P-Q).^2));
plot(trackP(:,1),trackP(:,2),'*',Q(1),Q(2),'rp',0,60,'r+'); pause(0.5) end%for
dis%兔子到达窝边时,狼兔之间的距离 P%兔子到达窝边时,狼的坐标 Q%兔子到达窝边时,兔子的坐标
(二)模拟程序运行结果
dis= 7.0619 P= 1.680553.1410 Q= 060 注:如果修改程序中的step赋值,则结果稍有不同。
程序结束后,输出狼兔的位置图如下。通过下图可以直观的看到,当兔子回到窝边时,狼还与兔子有一段距离,这表示兔子成功逃脱。 八、模型评价 1、优点
可以熟练的运用Matlab解决一些问题,对用Matlab编程有了更加深刻的了解。懂得了使用数学软件求解极限,积分等问题的方法。对于追击问题的数学模型有了一定的了解,并能简单的运用。对遇到的一些编程问题有了切身的解决办法提高了自己的编程能力。 2、缺点
许多数学公式的符号十分难输入,致使数学理论表述十分困难。需要输入的数据太多,容易出现输入错误,特别是容易遗漏标点符号。 3、改进方向
应考虑向简单模型优化,现有的模型还是很复杂,尤其是一些数学的计算要能非常熟练的运用微积分知识。所以应考虑更加简便易懂的模
型。
因篇幅问题不能全部显示,请点此查看更多更全内容