MATLAB事件定位查找不同物种完全转换所需时间

MATLAB event location to find time required for full conversion of different species

我有一个 ODE 系统如下:

dx1/dt = (x1,x2,x3)
dx2/dt = (x1,x2,x3)
dx3/dt = (x1,x2,x3)

初始条件为 x1=x2=x3=0 @ t=0,约束为 dx1/dt = 0,dx2/dt = 0,dx3/dt = 0 for x1 = 1, x2 = 1, x3 = 1 分别。一旦 x1、x2、x3 达到值 1,它们应保持在 1 以进一步增加 t。

我需要找出 (1) x1、x2、x3 在不同的 t 和 (2) 估计当它们中的每一个变为 1 时 t 的值。我很难获得 (2) 的结果。

我尝试使用以下事件函数:

function [val,stop,dir] = event(t,X)
X1 = x1; 
X2 = x2; 
X3 = x3;
val = [X1 -1; X2 -1; X3 -1];
stop= [1;1;1];
dir = [1;1;1];
end

没用。然后我尝试了另一个代码,至少找到了对应于x3 = 1的t(因为x3相对于x1和x2增长缓慢)。

function [val,stop,dir] = event(t,X)
X3 = x3;
val = X3 -1;
stop= 1;
dir = 1;
end

谁能在这方面指导我?

问候。 苏迪普

这看起来很容易用 ode 求解器解决,不需要事件。我会定义一个函数,例如:

function dX = my_ode(t,X)

for k=1:length(X)
    if abs(X(k)-1) <= 1e-6 % or use whatever tolerance you want, e.g. eps
       dX(k) = 0;
    else
       dX(k) = X(k);
    end
end

然后我将按如下方式调用 ode 求解器:

tspan = [0 10]; % choose whatever time span you want
X_init = [0 0 0];
[T,X] = ode45(@my_ode,tspan,X_init);
plot(T,X)

不确定为什么要使用 Simulink 标记,但如果需要,也可以在 Simulink 中轻松实现。