主要内容

Lotka-Volterra反应的随机模拟

这个例子展示了如何使用SSA随机求解器建立和模拟一个模型。

我们将构建以下模型并进行随机模拟:

  • 反应1:x + y1 -> 2 y1 + x,速率常数c1 = 10。

  • 反应2:y1 + y2 -> 2 y2,速率常数,c2 = 0.01。

  • 反应3:y2 - >z,速率常数,c3 = 10。

  • 初始条件:x=1(常数),y1=y2=1000, z=0。

  • 注:反应1中的物种“x”表示在反应两侧,以模拟x的量为常数的假设。

如果考虑到猎物数量(y1)在食物(x)存在时增加(反应1),捕食者数量(y2)在吃猎物时增加(反应2),而捕食者(y2)死于自然原因(反应3),这些反应可以解释为一个简单的捕食者-猎物模型。

本例所使用的参数和条件如Daniel T. Gillespie, 1977,“耦合化学反应的精确随机模拟”,《物理化学杂志》,第81卷,第1期。25,第2340-2361页。

为模型注册单元

sbioaddtolibrary (sbiounit (“兔子”“分子”1));sbioaddtolibrary (sbiounit (“狼”“分子”1));sbioaddtolibrary (sbiounit (“食物”“分子”1));sbioaddtolibrary (sbiounit (“amountDimension”“分子”1));

创建Lotka-Volterra模型

模型= sbiommodel (“生态模式”);C = add隔间(模型,“C”);c.CapacityUnits =“米^ 3”

将反应1添加到模型对象中

R1 =地址(模型,'x + y1 -> 2 y1 + x'
r1 = SimBiology反应阵列指数:反应:1 x + y1 -> 2 y1 + x
设定反应1的动力学定律。Kl1 = addkineticlaw(r1,“MassAction”);为反应添加速率常数参数c1,值为10P1 = addparameter(kl1,“c1”“价值”10);kl1。ParameterVariableNames = {“c1”};为c1添加单位p1。ValueUnits =“1 /(二*兔子)”在反应1中设置物种的初始数量r1.Reactants(1)。InitialAmount = 1;% xr1.Reactants(2)。InitialAmount = 1000;%日元在反应1中设置物种的初始数量单位r1.Reactants(1)。InitialAmountUnits =“食物”% xr1.Reactants(2)。InitialAmountUnits =“兔子”%日元

将反应2添加到模型对象中

R2 = addresaction(模型,'y1 + y2 -> 2 y2'
r2 = SimBiology反应阵列指数:反应:1 y1 + y2 -> 2 y2
设置反应2的动力学定律。Kl2 = addkineticlaw(r2,“MassAction”);将速率常数参数c2加到动力学定律中,值为0.01P2 = addparameter(kl2,c2的“价值”, 0.01);kl2。ParameterVariableNames = {c2的};为c2添加单位p2。ValueUnits =“1 /(二*狼)”在反应2中设置新物种的初始数量r2.2022世界杯八强谁会赢?Products(1)。InitialAmount = 1000;% y2在反应2中设置新物种的初始数量单位r2.2022世界杯八强谁会赢?Products(1)。InitialAmountUnits =“狼”% y2

添加反应3到模型对象

R3 = addresaction(模型,'y2 -> z'
r3 = SimBiology反应阵列指数:反应:1 y2 -> z
%添加“伪”单位垃圾变量“z”r3.2022世界杯八强谁会赢?Products(1)。InitialAmountUnits =“amountDimension”设置反应3的动力学定律。Kl3 = addkineticlaw(r3,“MassAction”);为反应添加速率常数参数c3,值为10P3 = addparameter(kl3,“c3”“价值”10);kl3。ParameterVariableNames = {“c3”};为c3增加单位p3。ValueUnits =“1 /秒”

显示已完成的模型对象

模型
模型:单元:1事件:0参数:3反应:3规则:0物种:4可观察物:0

显示反应对象

模型。反应
ans = SimBiology反应阵列指数:反应:1 x + y1 -> 2 y1 + x 2 y1 + y2 -> 2 y2 3 y2 -> z

显示物种对象

模型。物种
ans = SimBiology物种阵列索引:室:名称:值:单位:1 C × 1食物2 C y1 1000兔子3 C y2 1000土狼4 C z0 amountDimension

用随机(SSA)求解器和绘图进行模拟

c = getconfigset(模型,“活跃”);cs。SolverType =“ssa”;cs。StopTime = 30;cs.SolverOptions.LogDecimation = 200;cs.CompileOptions.UnitConversion = true;[t,X] = sbiosimulation (model);plot(t, X(:,2), t, X(:,3));传奇(“日元”“日元”);标题(“Lotka-Volterra反应-国家历史”);ylabel (“捕食者-猎物的数量”);网格

图中包含一个轴对象。标题为Lotka-Volterra Reaction - State History的axis对象包含2个类型为line的对象。这些物体代表Y1 Y2。

显示Y1到Y2的相位肖像

情节(X (:, 2) X (:, 3));标题(“Lotka-Volterra反应- Y1 vs. Y2”);包含(“Y1兔子的数量”);ylabel (“Y2土狼的数量”);

图中包含一个轴对象。标题为Lotka-Volterra Reaction - Y1 vs. Y2的axis对象包含一个类型为line的对象。

%清理单位。sbioremovefromlibrary (“单位”“兔子”);sbioremovefromlibrary (“单位”“狼”);sbioremovefromlibrary (“单位”“食物”);sbioremovefromlibrary (“单位”“amountDimension”);
Baidu
map