首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >系数条件变化的联立微分方程

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

Stack Overflow用户
提问于 2015-03-20 21:57:23
回答 1查看 130关注 0票数 0

我想建立一个Chemostat (某种生物反应器)的模型。我设置了以下系统,可以用ode45方法来解决:

代码语言:javascript
复制
%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))];

我称该职能为:

代码语言:javascript
复制
[t,y]=ode45(@systemEquations, [0 40],[1 100],[],**v0**, V,umax,Ks,rd,Cs0,Ys,m);

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

问题是,我完全不知道如何实现这一点。代码求解器的Matlab帮助也没有任何帮助。

感谢您的帮助和建议!

干杯,大丽

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-21 02:05:14

使用您的微分系统功能来照顾它为您!首先,将v0定义为时间和状态的函数:

代码语言:javascript
复制
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作为参数传递,或者让您的微分系统函数直接执行它。我现在把它当作一个参数。

代码语言:javascript
复制
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))];

称为使用:

代码语言:javascript
复制
[t,y]=ode45(@systemEquations, [0 40],[1 100],[],@funV0, V,umax,Ks,rd,Cs0,Ys,m);

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29176432

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档