系数有条件变化的联立微分方程

Simultaneous differential equations with conditional change of a coefficient

我想为恒化器(某种生物反应器)建模。 我设置了以下系统,可以用 ode45 方法解决:

%chemostat model, based on:
%DCc=-v0*Cc/V + umax*Cs*Cc/(Ks+Cs)-rd -->Change of cell concentration over time
%Dcs=(v0/V)*(Cs0-Cs) - Cc*(Ys*umax*Cs/(Ks+Cs)-m) -->Change of substrate concentration over time

function dydt=sys(t,y,v0,V,umax,Ks,rd,Cs0,Ys,m)
         dydt=[-(v0/V)*y(1)+(umax*y(1)*y(2))/(Ks+y(2))-rd; 
               (v0/V)*(Cs0-y(2))-(Ys*umax*y(2)*y(1))/(Ks+y(2))];

我用函数调用:

[t,y]=ode45(@systemEquations, [0 40],[1 100],[],**v0**, V,umax,Ks,rd,Cs0,Ys,m);

所有附加系数的值都是在运行计算前设置的。到目前为止一切正常。 现在我希望 v0 依赖于系统状态。例如。最初 v0 = 0,当我的细胞浓度超过某个值时,我希望它改变。

问题是,我完全不知道如何实现它。 ode 求解器的 Matlab 帮助也没有任何帮助...

感谢您的帮助或建议!

干杯, 大来

使用您的差分系统功能来为您处理!首先制定一个 v0 作为时间和状态的函数:

function v0 = funV0( t, y )
    v0 = 1;
    if y(1) > 5
        v0 = y(2); % As an example, if [Y1] > 5, then set v0 = [Y2]
    end
end

然后在您的微分系统中使用该函数。您可以将 @funV0 作为参数传递,也可以让您的微分系统函数直接执行它。我暂时把它当作一个参数。

function dydt=sys(t,y,v0,V,umax,Ks,rd,Cs0,Ys,m)
     dydt=[-(v0(t,y)/V)*y(1)+(umax*y(1)*y(2))/(Ks+y(2))-rd; 
           (v0(t,y)/V)*(Cs0-y(2))-(Ys*umax*y(2)*y(1))/(Ks+y(2))];

调用使用:

[t,y]=ode45(@systemEquations, [0 40],[1 100],[],@funV0, V,umax,Ks,rd,Cs0,Ys,m);

当然,这个原则可以应用于任何时间或状态相关的参数。这种风格还允许您尝试各种参数函数假设您将参数近似为状态的函数:您可以通过传入不同的 V0 函数来尝试不同的近似值。