生物学数学建模学习-种群增长模型2

恒化器模型

在发酵工程中,恒化器是非常常见的一类设计,如图一所示,它通过以恒定流速对目标腔室输入,输出物质,以获得所培养生物产生的次级代谢产物。而在生物学中,类似模型也非常常见,比如血液以恒定流速流经目标组织。因此,我们在本帖中将尝试对恒化器模型进行建模:


图一  恒化器模型(节选自课本121页)

首先,我们需要思考,恒化器与之前在试管或锥形瓶中培养细菌的区别是什么:恒化器系统变成了开放系统,有恒定的营养补充C0,有恒定的液体流出,同时带走一部分细菌与培养基。因此,我们可以升级我们原先的模型:对于细菌数目N的变化,与原先不同的地方在于有细菌不断流出,所以需要减去单位时间内流出的细菌,我们定义流速为F volume/time,细菌培养室体积为V volume 则有:

dN=K(C)N\ dt-\frac{F}{V} N\ dt

dC=-\alpha K(C)N\ dt-\frac{F}{V} C\ dt+\frac{F}{V} C_{0}\ dt

将dt乘到等式右边则为N,C对时间的变化率。


量纲检查 (Dimensional Analysis)

一个正确的系统的量纲必然是统一的,10kg永远不可能等于10m。让我们对上述建模进行量纲检查:

\frac{dN}{dt} \ \frac{\#}{time}= K(C)\ \frac{1}{time}*N\ \#-\frac{F}{V} \ \frac{volume}{time*volume} *N\ \#

可以得出等式两边的量纲是统一的。

这里很容易犯一个错误,将N变化率中新添加的减去项误认为FN,而不除水箱体积造成错误。在课程中老师就故意先犯了这个错误,并使用量纲检查的方式检查出了错误。

但是要注意,量纲正确是模型正确的必要条件,而不是充要条件,10kg也不等于100kg。


无量纲化 (Nondimensionalization)

我们已经知道,增长率 K(C)随食物浓度增加而增长,但是最多也只能达到某个极限值。为了便于计算与操纵关键值,我们引入米氏方程,并假设K(C)的变化符合米氏方程,

K(C)=K_{max}\frac{C}{K_{n}+C}

如图二:其中K_max是K(C)增长的极限,K_n是K(C)达到一半最大值时对应的浓度。


图二 米氏方程(引用自课本125页)

ps:个人闲话:在建模过程中我们经常引入各种假设,假设某个过程符合某个函数,仿佛非常武断。但是,在建模过程中我们经常遇到只知道有限信息的变量,我们只能根据有限的信息对其函数化。比如这里的米氏方程,logistic model 中的 intrinsic growth rate。事实上,我们的模型几乎不可能完全符合自然状况。在生物学中,我们需要的也仅仅是建立出大概符合状况的等式并分析出平衡点,而不是去尽善尽美地复现大自然。在这里的米氏方程,logistic model 中的 intrinsic growth rate都能够满足对应问题中的分析需求,这样这些模型就是优秀的模型。如果在新的问题中,模型不符合实际状况,我们就需要分析新的状况,并对原先的模型进行修改,达到新的要求。


将新的K(C)带入方程,获得新的模型:

\frac{dN}{dt}=K_{max}\frac{C}{K_{n}+C}N-\frac{F}{V}N

\frac{dC}{dt}=-\alpha K_{max}\frac{C}{K_{n}+C}N+\frac{F}{V}C_{0}-\frac{F}{V}C

这个模型越来越趋近真实情况,但是在这个模型中,我们已经使用了太多的常数,有K_max,K_n,F,V,α,C_0共计六个常数,单位也越来越复杂,非常不利于分析。在这种情况下,我们可以进行无量纲化处理。

无量纲化技巧有两个最显著的好处:

1. 在新系统中变量与参数都是没有单位/量纲的

2. 在新系统中含有的参数更少。

方法如下:另

N=N_{star}\hat{N} \ \ \ \ C=C_{star}\hat{C}\ \ \ \ t=t_{*}\tau

其中,N为原先的变量,N_star为新的变量,N_hat(N_帽子)为某常数,这个常数带有的单位是N的单位,所以这个常数像一个黑洞一样吸收了所有的单位/量纲。

下面以dN/dt为例,dC/dt请朋友们自行推导:

\frac{d(N_{star}\hat{N})}{d(t_{star}\tau)}=K_{max}\frac{C_{star}\hat{C}}{K_{n}+C_{star}\hat{C}}N_{star}\hat{N}-\frac{F}{V}N_{star}\hat{N}

将N_hat和τ乘到等式右边,化简后两式为:


输入了十分钟的公式消失了,气死我了

这样,我们可以利用N_hat,C_hat,τ来吸收掉其他的常数,另

\tau=\frac{V}{F},\ \ \ \ \ \hat{C} =K_{n},\ \ \ \ \ \hat{N}=\frac{K_{n}}{\alpha \tau K_{max}}

利用这三个常数,我们就成功地将常数的数目减少到了2个,为了书写方便,我们在不讨论新旧变量时,习惯上使用N替换N_star,C同理:

\frac{dN}{dt}=\alpha_{1}\frac{C}{1+C}N-N,\ \ \ \ \ \  \alpha_{1}=K_{max}\frac{V}{F}

\frac{dC}{dt}=-\frac{C}{1+C}N-C+\alpha_{2},\ \ \ \ \alpha_{2}=\frac{C_{0}}{K_{n}}

这样,我们就得到一组只有两个常量的方程,接下来的分析过程会得到简化。


稳定状态(steady state)

我们得到模型后,就可以分析恒化器模型中N,C随时间变化的趋势了。当N的导数为0,则有细菌数目不再增长的情况发生。但是,有可能该情况并不稳定,比如有更多的食物进入培养室,K增大,最终细菌的carrying capacity会增大,细菌数目也会继续变化。因此,另dN/dt=0,dC/dt=0,在这种时间点,N,C均无变化,系统进入稳定状态。

情况一:

N=0,\ so\ C=\alpha_{2}\ \ \ \ \ \ \ \ (N,C)=(0,\alpha_{2})

可以很容易想象该点发生的情况,如果没有初始细菌,营养源以恒定速率向培养室输入养分,培养室中营养浓度不断上升,最终达到稳定点,不再变化。

个人闲话:这个时候有朋友该问了:平衡点怎么说也应该是C0啊,没有细菌消耗,流出多少补充多少,怎么说都应该是C0,而不是C0/K_n (α_2)。这种想法是正确的,实际发生的情况的确是在C=C0时达到平衡。但是,我们经过无量纲化后,新的变量与老变量(也就是真实情况)之间存在代沟N_hat,所以,如果想代换回真实情况,我们需要在新变量C_star的结果α_2基础上乘C_hat=K_n,这样就能够得到真实值C0。

情况二:

N>0,\ \ so \ \ (N,C)=(\alpha_1(\alpha_2-\frac{1}{\alpha_1-1}),\frac{1}{\alpha_1-1})\ \ \ \ \alpha_1>1,\alpha_2>\frac{1}{\alpha_1-1}

由于是自然状态,细菌数目不可能小于0,食物浓度也不可能小于0,因此需要限制函数的定义域,N>0, C>0,另dN/dt=0,dC/dt=0后,可以得到情况2。我们也可以想象,细菌在恒化器模型中生长最终会达到一个上限,这个上限就是这里的N(如果得到真实值要乘N_hat)。

总结:我们通过对封闭系统中细菌生长模型进行修改,得到了恒化器培养细菌的细菌生长模型,并得到了两个稳定状态(steady states)。然而,在自然状态下系统总是受到很多情况的影响,难免会产生震荡。比如,不小心落了一点细菌进入系统,或者由于工作人员的疏忽水流开大了一下,有更多的营养物质加入系统。这个时候,我们就能够想象两种情况的变化,情况一会爆炸似地走向失控,而情况二,只要情况恢复回符合C0,F这些参数不变,在足够长的时间尺度下,系统总会走向这个平衡点。这样,第一个点就是不稳定的,而第二个点就是稳定的了。

但是,这个模型中我们容易想象,很多模型中我们想象不到,应该用怎样的方法去判断稳定状态是不是稳定的呢?这个问题,在下一节模型线性化中进行解答。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容