我想建立一个Chemostat (某种生物反应器)的模型。我设置了以下系统,可以用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,当我的细胞浓度超过某个值时,我希望它改变.。
问题是,我完全不知道如何实现这一点。代码求解器的Matlab帮助也没有任何帮助。
感谢您的帮助和建议!
干杯,大丽
发布于 2015-03-21 02:05:14
使用您的微分系统功能来照顾它为您!首先,将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 0作为参数传递,或者让您的微分系统函数直接执行它。我现在把它当作一个参数。
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函数来尝试不同的近似。
https://stackoverflow.com/questions/29176432
复制相似问题