方程式如下:
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解决这个问题?
答案 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(或其他已知函数)。