第二讲
常微分方程数值求解
—— 微分方程的应用
微分方程应用
微分方程应用
—— 猎狗追兔问题
问题描述:
在旷野上有一只野兔和一条猎狗,
猎狗发现野兔并开始追踪,同时野 兔也发现猎狗,开始跑向兔穴。
假定猎狗的追踪方向始终对着野兔,
猎狗和野兔的奔跑速度分别为 u 和 v。
问:猎狗能否在野兔进洞前抓住野兔?
微分方程应用
分析:
建立坐标系:设兔子的家为原点 (0,0),兔子与猎狗的初始位 置分别为 (0, b) 和 (x0, y0),其中 b<0,x0>0
在时刻 t:兔子位于(0, b+vt),
设猎狗位于 (x(t) , y(t) ) 。
(0,0)
(0,b)
(x0,y0)
由于猎狗的追踪方向始终 对着野兔,故有
d ( )
d
y y b vt
x x
− +
=
(0, b+vt) (x(t) , y(t) )微分方程应用
猎狗在 [0, t] 内走过的路程为
0
0
2 2
d d
1 d 1 d
d d
x x
x x
y y
u t x x
x x
= + = +
∫ ∫
其中 u 是猎狗奔跑的速度。
( )
0 2
'
x1 ' d
x
xy y b v y x
= − − u ∫ +
消去变量 t
两边求导
xy " v 1 ( ) y '
2= u +
猎狗奔跑的轨迹微分方程应用
如何判断猎狗有没有在野兔跑回家前追上兔子?
计算
x
=0 时y
的值!y
<0追上兔子!
微分方程应用
微分方程求解:
( )
2" v 1 '
xy y
= u +
0
0 0 0
0
( ) , '( ) y b
y x y y x
x
= = −
初值条件:
化为方程组:令
z=y'
2
'
' 1
y z
z v z
ux
=
= +
微分方程应用
% 函数文件
function dy = dog(x,y) global u v;
dy = zeros(size(y(:)));
dy(1) = y(2);
dy(2) = v/u*sqrt(1+y(2)*y(2))/x;
例:设野兔的家为原点 (0,0),兔子与猎狗的初始位置分别为 (0, -60) 和 (70, 15),猎狗和野兔的奔跑速度分别为 5m/s 和 3m/s,问:猎狗能否在野兔进洞前抓住野兔?
微分方程应用
% 脚本文件 clear all
global u v;
u = 5;
v = 3;
Y0 = [15; 15/14]; % 初值
[T,Y] = ode45(@dog,[70,0],Y0);
if Y(end,1)<=0
disp('猎狗能抓住野兔!') else
disp('猎狗抓不到野兔!') end
fprintf('x=0 时 y=%.4f\n', Y(end,1));