当前位置:文档之家› 饿狼追兔建模

饿狼追兔建模


fun1(a,b,d,theta,T); %函数的调用
B. fun1.m 文件 %基于 ode45 函数进行过修改 %用于饿狼追兔子的数学模型 %SC in 26-Jun-2015 function fun1(a,b,d,theta,T) %输入 a b d theta 便可分析出饿狼是否可以追上兔子; [t,y]=ode45(@fun2,[0,T],[0 0],[], a,b,d,theta); x=[d+a*t*cos(theta),a*t*sin(theta)]; n=length(t); j=n;
模型建立:
设狼发现兔子时狼的位置位于坐标原点,此时兔子位于 x 轴正向 dkm 处, 设其速度为 akm/h,方向与 x 轴正向的夹角为 ,其到巢穴的距离为 lkm,而狼的速度 设为 bkm/h。在追兔子的过程中假设狼始终对准兔子奔跑。
(x(t ), y(t )) 设 t 时刻狼的位置为 ,那么
2 2


b at y (t ) 1 d x(t ) b d x(t ) 1 at y (t )
2
........................................................(8)

2
........................................................(9)
则认为饿狼可以追上兔子,即兔子不能安全到达巢穴。
问题求解:
在此问题中设 x 轴正向为向正西方向的,y 轴正向为向正北方向的。则有
d 0.1 ,T 0.06 / a ,b 2a, = ; 2
则(3) (4)具体为
dx dt dy dt b dy 1 dx b dx 1 dy
0
0.01
0.02
0.03
0.04

0.05
0.06
0.07
0.08
0.09
0.1
从图中,我们可以看出当兔子到达巢穴时,恶狼并未追上兔子,所以兔子 可以安全到达巢穴。
附件: matlab 程序
A. Wolf_figure.m 文件 %调用函数对狼追兔子的动态过程进行绘图显示 %参数一;可以自己调节其他的参数 clear;close; d=0.1; theta=pi/2; %兔子奔跑方向与 x 轴正方向的夹角 a=30; b=2*a; %b=3*a; T=0.06/a; %兔子的速度是 30km/h %狼的速度,设置为兔子的两倍 %狼的速度设置为兔子的 3 倍 %兔子奔跑到巢穴所需要的时间
结合(1)(2)得到下面的微分方程
dx dt dy dt
b dy 1 dx b dx 1 dy
2 2

b at sin y (t ) 1 d at cos x(t ) b d at cos x(t ) 1 at sin y (t )
for i=1:n if i>40 pause; 先画出 40 个点再用 end %此行是为了用键盘控制打击的过程,
...键盘控制,更直观。
plot(x(i,1),x(i,2),'b^',y(i,1),y(i,2),'r.');
axis([0 max(x(:,1))*1.1 0 1.1*max(x(:,2))]);hold on; m(i)=getframe; if y(i,1)>=x(i,1), j=i; break; %捕获每一次画出的一个点的图像
end end hold off; movie(m); hold on; plot(y(j,1),y(j,2),'k*','markersize',20); legend('兔子','狼',2); if j<n, sprintf('兔子追上狼的时间是 %d',t(j)) hold on; plot(y(j,1),y(j,2),'rh','markersize',20); hold off; title(['狼将在第',num2str(t(j)),'小时追上兔子']); else title(['狼在',num2str(T),'小时内不能追上兔子']); end %演示获得的图像
求解此微分方程,得出 x(l/a)发现 x(l/a)<100,所以饿狼在兔子到达巢 穴之前没有追上兔子。除此之外,我们也可以利用 matlab 编程求解(8) (9).
这里我们选定 a=30km/h,用 matlab 画出饿狼追兔的一个演示图:
饿狼追兔图 0.06 0.05 0.04 0.03 0.02 0.01 0 兔子 饿狼 兔子已经到达巢穴
at l.........................................................................(6) 即t l T ................................................................(7) a
恶狼追兔问题建模
问题重述: 设有一只兔子和一只狼,兔子位于狼的正西 100m 处。假设兔子与狼同 时发现对方,并开始了一场追逐。兔子往正北 60m 处的巢穴跑,而狼则在其后 追赶。假设兔子和狼均以最大速度匀速奔跑且狼的速度是兔子速度的两倍。问兔 子能否安全回到巢穴。
解:
显然此问题为微分方程中导弹问题的变形,下面建立一般意义上的模型, 然后再进行求解。
C.fun2.m 文件 function dy=fun2(t,y,a,b,d,theta) %给出常微分方程的表达式 dydx=(a*t*sin(theta)-y(2)+1e-8)/... (abs(d+a*t*cos(theta)-y(1))+1e-8); dy(1)=b/(1+dydx^2)^0.5; dy(2)=b/(1+dydx^(-2))^0.5; dy=dy(:);
2
.................................(3)

2
.................................(4)
初始条件 x(0) 0, y(0) 0 .对于给定的 a, b, d , , l ,进行计算。若 x(t ) 满足
x(t ) d at cos ........................................................(5)
dx dy ( )2 ( )2 b.....................................................(1) dt dt
还可以知道 t 时刻兔子的位置为 (d at cos , at sin ) ,由于时刻对准目标, 则
狼的方向为:
dy at s i n y t( ) ................................................(2) dx d at cos x(t )
相关主题