0

方程如下所示:

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

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

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

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

那么,如何使用 matlab 表达和解决这个问题?

4

2 回答 2

1

你需要建立一个所谓的延迟微分方程。我正要解释如何做,但后来我找到了这个很棒的教程来做到这一点。示例 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
于 2013-04-14T21:36:59.097 回答
0

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

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

于 2013-04-14T17:53:55.057 回答