2013-04-14 68 views
0

的方程如下:如何在Matlab中表示和求解這個微分方程組?

DXI(T)/ dt的= -c * XI(T)*義(噸)

DYI(T)/ dt的= A *Σ{i = 1至其中a,b和c是任何你想要的常數值,例如a = 1,其中a,b和c是任意常數值,例如a = 1, b = 2,c = 3。 (t)* y1(t))表示從i = 1到n的和,例如n = 3:x1(t)* y1(t)+ x2(x1(t) (t)* y2(t)+ x3(t)* y3(t)

那麼,我該如何表達&用matlab解決這個問題?

+1

你有沒有檢查出http://www.mathworks.com/help/symbolic/solve-a-system-of-differential-equations.html? –

+0

是的,但我認爲用dsolve解決它是不可能的,因爲在第二個方程中有這樣的術語:xi(t)* yi(t - 1)。 – JZ555

回答

1

你需要建立所謂的延遲微分方程。我正要解釋如何做,但後來我發現這個美好的tutorial就是這麼做的。例1基本上是你需要的。

唯一的額外需要注意的是,你應該將DX/dt和DY/DT爲同一組微分方程

的讓我知道如果你需要更多的幫助

編輯: 保持在一個文件中

function dYdt = ddefun(t,Y,Z) 
    % assume Y = [x;y] 
    x = Y(1:n); % 2n is the size of Y. this step is unnecessary ... 
    y = Y(n+1:2*n); % but helps visualize what is happening 

    ytau = Z(:,1); 

    dYdt(1:n) = -c*x.*y; 
    dYdt(n+1:2*n) = a*dot(x,y) + x.*ytau + b 

end 
+0

謝謝。我對這些延遲微分方程做了一些研究,並在這裏找到了另一個例子:http://matlab.cheme.cmu.edu/tags/delay-differential-equation/ – JZ555

+0

在那個例子中,你實際上不需要將方程合併到同一套。所以,我要做的就是創造一個歷史函數,它給了我過去xi和yi的價值。現在唯一的問題是我如何在包含我的dde的函數內創建求和? – JZ555

+0

@ user2280026由於方程是交織在一起的,所以應該將方程組合到同一組中。然後你做的是變量上的[點](http://www.mathworks.com/help/matlab/ref/dot.html)產品。不要過分地解決你的問題:請參閱上面的編輯 – Rasman

0

如果您正在尋找數值解決方案(這意味着您還需要初始條件),則最常用的求解器是ode45。該鏈接舉例說明如何表達特定的ODE。

後來編輯:對於長期Ÿ − 1)您可能希望你的函數的長度爲1的「塊」爲整合 —例如 t ∈ {[0,1],[1,2],[2,3] ...} —並且使用先前找到的解作爲實際時間「塊」中的係數。就像這樣,解決方案從他們自己「喂」,你不會被卷積困擾。當然,在初始迭代中需要考慮( t − 1)= 0(或其他已知函數)。