當前位置:首頁 » 操作系統 » 狼和兔子演算法

狼和兔子演算法

發布時間: 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
,一個循環語句.

熱點內容
雷克薩斯nx哪個配置最保值 發布:2025-01-18 16:07:41 瀏覽:462
怎麼改加密密碼 發布:2025-01-18 16:06:48 瀏覽:125
通過域名訪問內網 發布:2025-01-18 16:01:39 瀏覽:275
md5加密後的密碼是什麼意思 發布:2025-01-18 15:50:16 瀏覽:193
如何qq空間訪問許可權 發布:2025-01-18 15:49:30 瀏覽:532
matlab遺傳演算法約束 發布:2025-01-18 15:31:33 瀏覽:910
果凍java 發布:2025-01-18 15:25:59 瀏覽:696
電腦與時間伺服器同步間隔 發布:2025-01-18 15:21:28 瀏覽:55
蘋果手機apple登錄密碼在手機哪裡 發布:2025-01-18 15:13:43 瀏覽:381
吃雞去哪裡下手游安卓 發布:2025-01-18 15:10:59 瀏覽:669