matlab恶狼追兔问题,饿狼追兔问题-数学建模.doc
實 驗 報 告
專業:美術 班級:(1)班 指導老師:牛老師
姓名:某某某 學號:123456789 實驗室:110
實驗名稱: 餓狼追兔問題 時間:2012年10
一、實驗目的及要求
理解二階微分法在建模過程中的應用,熟悉利用MATLAB軟件求解微分方程的方法。注意模型的普遍性和模型的廣泛性
二、問題的分析
現有一只兔子、一匹狼,兔子位于狼的正西100米處,假設兔子與狼同時發現對方并一起起跑,兔子往正北60米處的巢穴跑,而狼在追兔子。已知兔子、狼是勻速跑且狼的速度是兔子的兩倍。問兔子能否安全回到巢穴?
(1)分析餓狼追野兔的運動模型。餓狼追野兔過程中,野兔的目的是要在餓狼捉住自己之前跑到自己的巢穴,假如惡狼知道野兔巢穴的具體位置,根據題目所給,餓狼完全可以先兔子跑到其巢穴,然后在那里守株待兔,野兔則難逃餓狼之口。那樣餓狼的軌跡就是一條直線,只需簡單的數學計算就可以完成。
(2)但這是一個理想化的實際問題,在這個問題中由于餓狼不可能知道兔子巢穴的具體位置,因此它的速度的方向永遠是朝著兔子的,兔子一直向北跑,相對于餓狼來說兔的角度在時刻的變化,所以最終餓狼的軌跡是一條曲線。而兔子能否活下來,還是一個需要經過具體較復雜計算的問題。
三、模型的建立與求解
初始時刻(t=0)兔子位于原點(0,0),餓狼位于(100,0);兔子以常速度v0沿y軸跑,餓狼在t時刻的位置為(x,y),其速度為v1=2v0;餓狼在追兔子過程中一直向著兔子的方向,則:
餓狼在t時刻其追趕曲線的切線方程為
Y-y=(dy/dx)*(X-x)=[(dy/dt)/(dx/dt)]*(X-x)
其中(X,Y)為切線上動點。
又餓狼在追兔子過程中一直向著兔子的方向,則t時刻兔子(0,v0t)在切線上,所以v0t-y=[(dy/dt)/(dx/dt)]*(0-x)
從而餓狼追趕軌跡由下方程組確定
(dx/dt)*( v0t-y)= (dy/dt)*(-x) (1)
(dx/dt)2+(dy/dt)2=v12 (2)
由(1)有(dy/dx)*(-x)= v0t-y,兩邊對t求導并化簡
(d2y/dx2)* (dx/dt) *(-x)= v0 (3)
由(2)有 (dx/dt)2{1+[(dy/dt)/(dx/dt)]2}=v12
即dx/dt=-v1/[1+(dy/dx)2]1/2 (注這里取負號,是由這個追趕曲線——上圖,決定的)
代入(3),并把v1=2v0代入并化簡得
(d2y/dx2)*x=[1+(dy/dx)2]1/2/2 (4)
這是一個二階微分方程,它滿足初始條件y(100)=0
令p= dy/dx,這dp/dx= d2y/dx2,這(4)化為
(dp/dx)*x=[1+p2]1/2/2,可分離變量求得
ln{p+[1+p2]1/2/2
又p(100)=0,所以c=-ln10,從而
p+[1+p2]1/2/2=x1/2/10
這p=( x1/2/10-10/x1/2)/2
即dy/dx=( x1/2/10-10/x1/2)/2,從而
y=(x-300)*x1/2/30+c,又y(100)=0
則
y=(x-300)*x1/2/30+200/3
令x=0,得
y(0)=200/3>60
故兔子沒有有危險
常微分方程高階初值問題的MATLAB庫函數為:ode45。
語法為:[t,Y] =ode45(odefun,tspan,y0)
例如函數: function dy = rigid(t,y)
dy = zeros(3,1); % a column vector
dy(1) = y(2) * y(3);
dy(2) = -y(1) * y(3);
dy(3) = -0.51 * y(1) * y(2);
設置選項:
options = odeset('RelTol',1e-4,'AbsTol',[1e-4 1e-4 1e-5]);
求解得:
[t,Y] = ode45(@rigid,[0 12],[0 1 1],options);
畫出解函數曲線圖形:
plot(T,Y(:,1),'-',T,Y(:,2),'-.',T,Y(:,3),'.')
但是我們決定不用題目中給的函數,而是采用另一個函數:
r = dsolve('eq1,eq2,...', 'cond1,cond2,...', 'v'),這個函數的作用是把常微分方程(無論是一階還是高階)轉化成不帶有求導的一般性方程,但是一般情況下經過這種函數轉化之后,得到
總結
以上是生活随笔為你收集整理的matlab恶狼追兔问题,饿狼追兔问题-数学建模.doc的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 原生JS制作缤纷色彩板
- 下一篇: pyspark学习——统计《少年派的奇幻