如何在Matlab中表达和解决这个微分方程系统?

时间:2013-04-14 17:08:24

标签: matlab math differential-equations ode equation-solving

方程式如下:

dxi(t)/ dt = -c * xi(t)* yi(t)

dyi(t)/ dt = a *Σ{i = 1到n}(xi(t)* yi(t))+ xi(t)* yi(t - 1)+ b

其中a,b和c是您想要的任何常数值,例如a = 1,b = 2,c = 3.

Σ{i = 1到n}(xi(t)* yi(t))表示从i = 1到n的求和, 例如n = 3:x1(t)* y1(t)+ x2(t)* y2(t)+ x3(t)* y3(t)

那么,我该怎么表达&使用matlab解决这个问题?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

如果您正在寻找数值解(这意味着您也需要初始条件),最常用的解算器是ode45。该链接提供了有关如何表达特定ODE的示例。

稍后编辑:对于术语 y i t -1),您可能希望整合在 t 的长度为1的“块”中起作用 - 例如 t ∈{[0,1],[1,2],[2,3] ...} - 并使用先前找到的解作为实际时间“chunk”中的系数。像这样,解决方案从他们自己“提供”,你不会受到卷积的困扰。当然,在初始迭代中需要考虑 y i t -1)= 0(或其他已知函数)。