当前位置:首页 » 操作系统 » 狼和兔子算法

狼和兔子算法

发布时间: 2022-07-30 12:21:13

1. 求助狼追兔子编程问题 速进

for(n=1;n<999;n+i,i++)

其中的 n+i 应该是 n=n+i 吧?
另外,这样编程不严谨,因为不同的机器 n=n+i 和 i++ 被执行的次序可能不一样,因此导致问题
建议把 n=n+i 放到循环之中去

2. 狼追兔子的c语言实现

其实不用循环1000次的,我有个思路

按照兔子给出的算法,把得出的结果存到一个单链表或者数组中(用来检索重复),
然后定义一个数据结构存储每一个过程,还要定义一个单链表或者数组来存储每一个过程,如果发现某一个过程,和以前的出现过的某个过程重复就可以退出循环了,因为一个过程总是可以由它的前一个过程推算出来的。

最后,结果集合中不包含的洞数就是结果了。

说具体点就是
1+2 是 第一个过程 3 是第一个结果
3+3 是 第二个过程 6 是第二个结果
6+4 是 第三个过程 10 是第三个结果
0+5 是 第4个过程 5 是第4个结果
5+6 是 第5个过程 1 是第5个结果
1+7 是 第6个过程 8 是第6个结果
8+8 是 第7个过程 6 是第7个结果
6+9 是 第8个过程 5 是第8个结果
5+0 是 第9个过程 5 是第9个结果
5+1 是 第10个过程 6 是第10个结果
以此类推

由上可知,用来存储过程的结构体只需要包含一个加数成员
和一个被加数成员,如果两个过程的加数成员和被加数成员都是相同的,就可以退出循环了,这样最多循环10×10次就可以得到结果,实际上只需要20次,就会退出循环。

过程中加数成员和被加数成员以及结果一旦超过或者等于10,就减去10,这是因为按照兔子的算法,11+12和1+2根本就是一样的。

3. 利用高阶常微分方程模型—饿狼追兔问题

基于高阶常微分方程模型饿狼追兔问题分析
http://www.paper.e.cn/downloadpaper.php?serial_number=200906-555&type=1 http://www.paper.e.cn
- 1 -
基于高阶常微分方程模型饿狼追兔问题分析
朱云龙1,赵娜2,孙利杰1,王勃1,程明1,白海滔1,
王建1,李开1,赵福兴1,王铁柱1
1 辽宁工程技术大学采矿工程系,辽宁阜新(123000)
2 辽宁工程技术大学生物工程(食品科学)系,辽宁阜新(123000)
E-mail:[email protected]
摘要:利用高阶常微分模型饿狼是否能追上兔子。首先,建立狼和兔子的运动轨迹模型,
兔子是向正北方向的洞穴直线跑去,狼沿曲线追去。接着,利用matlab 画出狼和兔子的运
动轨迹图形。然后,利用解析方法求解x=0时y 的值,依次来判断狼是否能够追上兔子。最
后,再用数值微分方法求解x=0时y 的值判断狼是否能够在兔子进洞之前将其擒获,美餐一
顿。常微分方程在很多学科领域内有着重要的应用,自动控制、各种电子学装置的设计、弹
道的计算、飞机和导弹飞行的稳定性的研究、化学反应过程稳定性的研究等。这些问题都可
以化为求常微分方程的解。
关键词:高阶常微分;数值微分;数学模型
中图分类号:O172.1
1 引言
在我们现实生活中,有很多追击问题,如赛车比赛,田径比赛,鹰抓兔子等等追击现象。
那么这些问题是否成立,是否能成功呢?再次将要论述与验证狼和兔子的模型,看看是否能
追的上,并通过MATLAB 画出狼和兔子曲线[1]。在我们实现实生活中有很多地方要用到这
些追击模型。虽然狼无暇顾及兔子的洞穴所在,并计算怎样才能追上兔子,可它丢掉的仅仅
是一顿美餐而已,再寻其它猎物即可。可是我们人类就不同了,如在军事上,跟中导弹追击
敌机问题,恰与饿狼追兔问题模型相似。根据追击者和被追击者相差距离和被追击者得逃亡
范围,通过计算,适当调整速度,即可追上。倘若不假思索的追击,后果将不堪设想,失去
的将不仅仅时一顿每餐那么简单。所以,通过本模型分析将要得到清晰的MATLAB 曲线,
使结果明确的显现在计算机上,一目了然,希望此模型能用到我们现实生活中,得到一定用
处,提高国民经济和科学技术的应用。
2 问题的提出
神秘的大自然里,处处暗藏杀机,捕猎和逃生对动物的生存起着至关重要的作用,而奔
跑速度和路线是能否追上和逃生的关键因素。这里就讨论一对老冤家的追逃问题,快速奔跑
的狼能否追上不远处有洞穴的兔子。
有一只兔子、一匹狼,兔子位于狼的正西100 米处,假设兔子与狼同时发现对方并一起
起跑,兔子往正北60 米处的巢穴跑,而狼在追兔子。已知兔子、狼是匀速跑且狼的速度是
兔子的两倍。试建立数学模型[2]研究以下问题:
(1)根据已知条件,建立狼的运动轨迹微分模型。
(2)画出兔子与狼的运动轨迹图形。
(3)用解析方法求解,判断兔子能否安全回到巢穴。
(4)用数值方法求解,判断兔子能否安全回到巢穴。
3 模型建设
假设狼不知道兔子远处是否有洞穴,故狼的速度方向应该始终是朝向兔子,而兔子是不
中国科技论文在线
- 2 -
断奔跑的,所以狼的速度方向不断的改变,运动轨迹应该是一条光滑的曲线。设兔子的速度
为v,以t=0 时刻兔子的位置为原点,兔子朝向狼的方向为x 轴,逆时针旋转90 度的方向
为y 轴方向建立平面直角坐标系,t 时刻狼的坐标为(x,y),兔子的坐标为(0,vt),狼的速
度方向与x 轴负半轴的夹角为θ。
3.1 问题的分析与模型建立
3.3.1 建立狼的运动轨迹微分模型
作出狼的运动轨迹草图如下:
图1 狼的运动轨迹草图
Figure 1 the trajectories of a wolf plan
t 时刻y 对x 求导等于曲线在点(x,y)处的切线斜率,即
Y= − tanθ (1)
又由于狼的运动方向指向兔子,所以,
x
vt − y
tanθ = = − tanθ
dx
dy
(2)
由(1)和(2)得,
x
y vt
dx
dy −
=
(3)
将狼的速度分解成为沿x 轴和y 轴方向,即x v =
dx
dt ,
y
v dy
dt
=
,所以,
2
2 2
(2v)
dt
dx
dt
dy = ⎟⎠

⎜⎝
+ ⎛ ⎟⎠

⎜⎝

(4)
由(3)式可得,
y = x dx
dy
+ vt (5)
两边对t 求导得,
中国科技论文在线http://www.paper.e.cn
- 3 -
v
dt
dx
dx
x d y
dx
dy
dt
dx
dx
dy = ∗ + ∗ + 2
2
(6)
整理,得
dt
dx
dx
x d y ∗ 2
2
= −v (7)
将(4)式左右两边同乘以
2 dt
dx
⎛ ⎞
⎜ ⎟
⎝ ⎠
,得
2 dy
dx
⎛ ⎞
⎜ ⎟
⎝ ⎠
+1=
2
2 4 ⎟⎠

⎜⎝

dx
v dt (8)
由(7)、(8)两式得
2
2
dx
d y
v
x
dx
dt = −
(9)
(9)式即为狼的运动轨迹微分模型。
3.3.2 画出兔子与狼的运动轨迹图形
根据上述微分方程,利用 matlab 软件中的ode45 函数即可求出二阶微分方程(9)中x
值对应的y 值,再利用绘图函数plot 即可画出狼的运动轨迹图像[3]。程序如下:
先建立matlab 函数:
function f=odefun(x,y)
f(1,1)=y(2);
f(2,1)=sqrt(1+y(2).^2)./(2.*x);
再在主程序中输入下列程序:
t=100:-0.1:0.1;
y0=[0 0];
[T,Y] = ode45('odefun',t,y0);
plot(T,Y(:,1),'-')
即可得到如下曲线,即为狼的运动轨迹图形。
中国科技论文在线http://www.paper.e.cn
- 4 -
图2 狼的运动轨迹图形
Figure 2 the trajectories of a wolf graphics
兔子的运动轨迹是一条从(0,0)点到其洞穴(0,60)的直线,所以,再在主程序中
输入以下程序即可将兔子和狼的运动轨迹绘制出来。
x1=[0 0];
y1=[0 60];
plot(T,Y(:,1),'-',x1,y1,’r’)
绘制出来的图像如下图:
(其中蓝色代表狼的运动轨迹,红色代表兔子的运动轨迹)
中国科技论文在线http://www.paper.e.cn
- 5 -
图3 狼和兔子的运动轨迹图形
Figure 3 wolves and rabbits trajectories graphics
4 模型求解
4.1 用解析法求解兔子能否安全回到巢穴
判断狼是否能追上兔子,可先假设没有洞穴,看看狼再什么位置可以追上兔子,若追上
时兔子运动的距离已经超过60 米,那就是说再狼追上兔子之前,兔子已经安全的逃回洞穴
之中。用解析法判断狼是否能追上兔子的具体过程[4]如下:
可假设
p dx
dy
= ,则
2
2
dp d y
dx dx
= ,那么(9)式可变为
2
2 2 4 1 ⎟⎠

⎜⎝
+ = ⎛− ∗
dx
dp
v
p v x (10)
整理得
2
2 2 4 1 ⎟⎠

⎜⎝
+ = ⎛
dx
p v dp (11)
dx
p2 +1 = 2x dp (12)
x
dx
p
dp
2 1 2
=
+
(13)
再对等式两边积分,得
( ) '
1 ln p + p2 +1 = ln x + C (14)
也即
中国科技论文在线http://www.paper.e.cn
- 6 -
p + p2 +1 =C x 1 (15)
因为x=100 时,狼的速度方向沿y 轴负向,所以此时p=0,可求得1 C =
1
10
(15)式可变为
p + p2 +1 = x
10
1
(16)
两边平方
100
2 p2 +1+ 2 p p2 +1 = x (17)
移项
2 p p2 +1 = (2 1)
100
x − p2 +
(18)
再次平方
(2 1)
100
4 4 1 2
10000
4 4 4 2 2
2
p4 + p2 = x + p + p + − x p + (19)
整理
( ) 1 0
100
4 2
10000
2
2
x − p + x + =
(20)
求p
2
2
2 10
10
100 2
100
2
100
1
4 10000 ⎟ ⎟


⎜ ⎜


− = + − = −
+
=
x
x
x
x
x
x
p
(21)
x
p x 5
20
= − (22)
因为
p dx
dy
= ,所以(22)式可变为
x
x
dx
dy 5
20
= − (23)
两边积分即可得到y 与x 的函数关系式
3 1
2 2
2
1 10
30
y = x − x +C (24)
因为x=100 时,y=0,所以
3 1
2 2
2
0 1 100 10 100
30
= ∗ − ∗ +C
解得
2 C =
200
3
=66.67
中国科技论文在线http://www.paper.e.cn
- 7 -
故(24)式可变为
3 1
1 2 10 2 200
30 3
y = x − x + (25)
令x=0,可求得y=
200
3
=66.67
因为y=66.67>60,所以在狼追上兔子之前,兔子已经安全逃回到洞穴之中,饿狼只能
干瞪眼了。
4.2 用数值方法求解兔子能否安全回到巢中
前面已经用解析法判断出狼并没有追上兔子,那么我们现在再用数值微分法求出(9)
式中x=0 时y 的值,再将y 值与60 比较,若y 大于60,则也说明在兔子安全逃回洞穴之前,
狼没有追上兔子,下面就是用数值微分法并借助matlab 软件判断狼是否能够追上兔子的方
法:
利用matlab 软件中的ode45 函数求出二阶常微分方程的初值,并求出x=100 时y 的值
即可判断出狼是否能够追上兔子[5]。具体matlab 程序如下:
先建立odefun 函数:
function f=odefun(x,y)
f(1,1)=y(2);
f(2,1)=sqrt(1+y(2).^2)./(2.*x);
再在主程序中输入如下程序:
t=100:-0.1:0.1;
y0=[0 0];
[T,Y] = ode45('odefun',t,y0);
n=size(Y,1);
Y(n,1)
即可输出结果:
ans =63.5007
x=0.1 时,y=63.5007>60,而当x=0 时y>63.5007 当然也大于60,所以狼在兔子进洞之前
并没有能够追上兔子,一顿美餐就这样从它眼前没了。
5 结果分析
从图 2 可以粗略的看出x=0 时y 的值大于60,用数学解析法也算出y 值等于66.67 大于
60,用数值微分法算出来的y 值也大于60。所以,从种种计算方法表明,在兔子就如洞穴
之前,狼时无法将其擒获的。
如果换个角度考虑,假设狼知道兔子的洞穴所在,直接跑向其洞穴处守洞待兔。那么根
据勾股定理[6],狼运动的距离s= 6 0 2 + 1 0 0 2 =116.6m,此时兔子运动距离为s/2=58.3<60。
也就是说兔子还没有逃进洞里,而狼已经再其洞口等待,那么兔子就不敢进洞,只要兔子没
法进洞,狼的速度是兔子的2 倍,狼就可将其擒获。可惜,饥饿而又贪婪的狼只想着怎么样
快速的追上兔子美餐一顿,哪里有时间而且也不会进行这么复杂的计算,并且很多情况下狼
是不知道兔子的洞穴所在,所以,狼只能在快要追到兔子的时候看着兔子溜掉而干瞪眼了

4. 数学模型解释狼能否追上兔子

假设狼的速度为x,
兔的速度为y.
当狼跑完100+60所用的时间小于兔子跑完60米的时间时, 狼能追上兔子。
即 160/x<=60/y.
得 x/y>=8/3.
即当狼的速度大于兔子速度的2.67倍时, 狼能追上兔子。 否则不能。#

5. 数模 恶狼追兔问题

若狼以直线路线追赶,兔不能安全回到巢穴。
设兔速充为V,狼为2V
兔到洞口用时间为:60/V,狼到洞口用时间为:(20倍的根号34)/2V
前者用时多,所以,在兔到洞口之前,狼已到洞口,故狼可以追上兔

若狼始终面朝兔追赶,狼的路线是曲线
这样就有复杂了
因为要求出曲线的方程
正解中~~~

呵呵,能力不及了

6. 狼追兔子问题 用C语言编程

#include <stdio.h>

void main()
{
bool dong[10]={0};
int lang=0;
for(int i=0;i<100;i++)
{
dong[lang]=true;
lang++;
lang+=i;
lang=lang%10;
}
for(int i=0;i<10;i++)
if(!dong[i]) printf("兔子可能在第%d洞中\n",i+1);
}

7. 一题数学建模问题,狼追兔子,急急急。。。。。。。。。。。。。。。。。。。。。。

不考虑循环,得一数列
1,3,6,10,15,21.............
对应C(2.2),C(3,2),C(4,2),C(5,2)......
得数列通项为C(n+1,2)=n(n+1)/2
数列通项除以10后的余数就是狼找过的洞的号数,相应的除以10后未出现的余数
用MATLAB输入N,得出前N个数项除以10后的余数,应该可以看出规律来
洞数改变后,比如说k个洞,那就是数列项除以k后的余数就是狼找过的洞的号数
电脑中MATLAB删了很久了,程序你就自己写了,若不用电脑找出循环规律的话也就两个输入K和N
,一个循环语句.

热点内容
入侵php 发布:2025-01-18 19:01:09 浏览:801
存储的下标范围 发布:2025-01-18 19:00:57 浏览:337
文件夹怎么打开 发布:2025-01-18 18:47:07 浏览:296
杉德卡卡号和密码看哪里 发布:2025-01-18 18:43:27 浏览:712
android返回退出 发布:2025-01-18 18:43:26 浏览:601
linux采集视频 发布:2025-01-18 18:38:38 浏览:638
差异度算法 发布:2025-01-18 18:34:27 浏览:698
电脑全套配置有哪些 发布:2025-01-18 18:32:39 浏览:145
新项目源码 发布:2025-01-18 18:14:48 浏览:517
脚本设计图 发布:2025-01-18 18:06:17 浏览:601