第二讲
常微分方程数值求解
—— 微分方程的应用
微分方程应用
微分方程应用
—— 猎狗追兔问题
问题描述:
在旷野上有一只野兔和一条猎狗,
猎狗发现野兔并开始追踪,同时野 兔也发现猎狗,开始跑向兔穴。
假定猎狗的追踪方向始终对着野兔,
猎狗和野兔的奔跑速度分别为 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)
由于猎狗的追踪方向始终 对着野兔,故有
(x(t) , y(t)) (0, b+vt)
d ( )
d
y y b vt
x x
微分方程应用
猎狗在 [0, t] 内走过的路程为
其中 u 是猎狗奔跑的速度。
消去变量 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
0 2
' x 1 ' d
x
xy y b v y x
u
2" v 1 '
xy y
u
微分方程应用
如何判断猎狗有没有在野兔跑回家前追上兔子?
计算 x=0 时 y 的
值!
y <0 追上兔子 !
微分方程应用
微分方程求解:
初值条件:
化为方程组:令 z=y'
2" v 1 '
xy y
u
0
0 0 0
0
( ) , '( ) y b
y x y y x
x
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));