2013-04-14 41 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(或其他已知函数)。