饿狼追兔模型研究

更新时间:2024-06-04 12:15:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

数学建模

辽宁工程技术大学

数 学 建 模 课 程 成 绩 评 定 表

学 期 姓 名 专 业 班 级 课程名称 数学建模 论文题目 高阶常微分方程模型—饿狼追兔问题 评定指标 分值 得分 知识创新性 20 理论正确性 20 内容难易性 15 评 结合实际性 10 知识掌握程度 15 定 书写规范性 10 标 工作量 10 准总成绩 100 评语: 任课教师 时 间 09年 月 日 备 注 - 1 -

年珊珊:饿狼追兔问题

饿狼追兔模型研究

摘要:本文建立狼的运动轨迹微分模型;在各种假设的情况下,通过数形结合的直观形象

的画出兔子与狼的运动轨迹图形;采用解析方法和数值方法,研究兔子与狼的运行轨迹,编写matlab程序建立追击问题的数值模型。

关键词:饿狼追兔 数值解析 微分方程 求解

1 问题的背景

1.1 问题的背景

狼追兔子问题是欧洲文艺复兴时代的著名人物达.芬奇提出的一个数学问题。现有一只兔子、一匹狼,兔子位于狼的正西100米处,假设兔子与狼同时发现对方并一起起跑,兔子往正北60米处的巢穴跑,而狼在追兔子。已知兔子、狼是匀速跑且狼的速度是兔子的两倍。建立狼的运动轨迹微分模型。画出兔子与狼的运动轨迹图形。用解析方法求解,问兔子能否安全回到巢穴,用数值方法求解,问兔子能否安全回到巢穴。狼在追赶过程中所形成的轨迹就是追击曲线。狼是否会在兔子跑回洞穴之前追赶上兔子呢?为了研究狼是否能够追上兔子,可以先考虑求出狼追兔子形成的追击曲线,然后根据曲线来确定狼是否能够追上兔子。

2 模型的假设

2.1将问题转化为图形如下

- 2 -

数学建模

2.1.1图形说明

建立直角坐标系:兔子初始位置向东为x轴,兔子的正北方方向为y轴,设点A为狼的初始位置,点O为兔子的初始位置,点B为兔子巢穴的位置,参照图(1)。

2.2 主要假设

2.2.1 假设狼始终以兔子为目标,将二者看做两个运动的点。 2.2.2 假设外界条件对饿狼和兔子的运行轨迹没有任何影响。

3 符号说明

S0 狼初始位置距离兔子巢穴的位置

B 兔子t时间后运行的位置 S B点距离O点距离 T 运行经历的时间 v 兔子的运行速度 V 狼的运行速度

r 兔子与狼的速度比

4 分析、建立模型及模型求解

4.1 模拟方法:通过已假设的条件,可知狼始终对准兔子,用参数方程

x=x(t);y=y(t) t>=0

来描述饿狼的运动轨迹,兔子做匀速直线运动,在t时刻兔子的位置是O点距B点距离s=v*t,因此当饿狼追击到点D的位置时,其速度指向点B,由几何关系有

dy/dt=tan(θ)=—(s-y)/x=—(v*t-y)/x, (1)

这并不是一个常量微分方程,为了进行数值模拟,还需做进一步的变形。

4.1.1 将速度分解为沿x方向和沿 y方向的两个分速度:

dx/dt=2*v*cos(θ),dy/dt=2*v*sin(θ), (1.a) 其中

cos(θ)=(v*t-y)/sqrt((v*t-y)^2+(x)^2),sin(θ)=-(v*t-y)/sqrt((v*t-y)^2+(x)^2).(1b)

4.2 对此问题的解析解分析

4.2.1 此类问题可化为一个常微分方程,并可得到解析解。由于兔子的运动过程S=v*t,

由(4.1)式

dy/dx=-(v*t-y)/x, (4.2.1a)

上式中含有变量t,必须设法消去,注意(4.1)意味着 (dy/dx)^2+(dy/dt)^2=(2*v)^2, (4.2.1b)

将上述两个方程联立可消去t。位计算简单起见,把y作为自变量将(4.2.1a)写成 -y*dx/dy=v*t-y, (4.2.1a*) 所以求导后的方程为

- 3 -

年珊珊:饿狼追兔问题

-dy/dx-y*d^2x/dy^2=v*dt/dy-dx/dy,

4.2.2 另一方面,从方程(4.2.1b)容易解出(dt/dy)^2=(1+(x’)^2)/v^2,带入前式消去

中间变量t,得方程

d^2x/dy^2=-r*sqrt[(1+(dx/dy)^2)/y], (4.2.2a)

其中r为兔子与饿狼的速度之比,其值为1/2 ,而初始条件为 x=0,x’(sqrt( S0^2-S^2)=S1/sqrt(S0^2-S^2), (4.2.2b) 下面采用Matlab的符号求微分方程的运算命令解这一方程。

4.2.3 求解符号微分方程指令dsolve:格式为

r=dsolve(‘eq1,eq2,……’,’cond1,cond2,……’,’v’) 其中’eq1,eq2,……’为相应的微分方程(组),’cond1,cond2,……’为初始条件,’v’为自变量。

在下面的程序中,D为求导算符,Dn代表求n阶导数。取参数S=60,S0=100,程序如下:

syms y d r

xs=simplify(dsolve('D2x=-r*sqrt(1+Dx^2)/y','x(60)=0','Dx(60)=0','y'))

{xs=[1/2*(y^(1+r)*r*60^(-r)+y^(1-r)*r*60^r-40*r-y^(1+r)*60^(-r)+y^(1-r)*60^r)/(-1+r^2)] }

[-1/2*(y*exp(-2*r*(-log(y)+2*log(2)+log(5)))*r+y*r-40*r*

exp(-r*(-log(y)+2*log(2)+log(5)))-y*exp(-2*r*(-log(y)+2*log(2) +log(5)))+y)/(-1+r^2)*exp(r*(-log(y)+2*log(2)+log(5)))] 可见xs有两个解,第一个解经整理得

x=1/1-r^2*(-40*r+60^(-r)*(r-1)*y^(1+r)+20^r*(r+1)*y^(1-r), 第二个解不合理舍去,取r=0.5画追线轨迹。 r=0.5;y=60:-0.01:100;

x=1/2*(y.^(1+r)*r*60^(-r)+y.^(1-r)*r*60^r-40*r-y.^(1+r)*60^(-r)+y.^(1-r)*20^r)/(-1+r^2); shg,comet(x,y)

运行后图形如下所示:

- 4 -

数学建模

4.3对此问题的数值模拟

4.3.1 进行数值模拟时,可采用时间步长法:按照时间流逝的顺序一步一步对恶狼和兔

子的活动进行模拟。由(4.1.1)式出发,类似于Eular方法,分别计算它们在每一时刻的x坐标和y坐标,从而可递推的计算它们的位置坐标,在整个模拟过程中,时间步长是固定不变的,按下面的算法计算: 算法

(1)选取参数,B与C之间的距离为60m,B与A之间的距离是100m,兔子速度v=5m/s,恶狼速度10m/s,根据这些数据画出兔子了恶狼的初始位置如图(2-1)所示。

(2)选取时间区间[0,T],将其n等分,时间步长为dt,恶狼的初始坐标为(x0,y0); (3)根据(4.1.1)式,递推计算X(k+1)=X(k)+v*cos(θk)dt,Y(k+1)=Y(k)+v*sin(θk)dt, 并设定停止规则:如果两个质点的距离小于某个容许值,如0.1m,就可认为两者相遇,并停止计算。

4.3.2 由微分方程得到其Matlab函数

具体分析如下在t时刻,兔子跑过的路程为

s1?y1?v1t (4.3.2.1)

设狼的速度是兔子的r倍,则狼跑的路程为

s2?rs1?ry1100x (4.3.2.2)

狼跑过的路程可以用对弧长的曲线积分知识得到,如下:

s2??1?y?dx2 (4.3.2.3)

联立上述方程得

?100x2?1?ydx?ry1?r(y?y?x) (4.3.2.4)

对上式两边求对x的导数,化简得

y???1?y?rx2 (4.3.2.5)

上述微分方程的初始条件有:

- 5 -

本文来源:https://www.bwwdw.com/article/7dm6.html

Top