主要内容

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(常数),y =y2=1000, z=0。

  • 注:反应1中的物种“x”表示在反应的两边,以模拟x的量是恒定的假设。

这些反应可以被解释为一个简单的捕食者-被捕食者模型,如果考虑到在食物(x)存在时,被捕食者的数量(y1)增加(反应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 + y -> 2 y + 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 =地址(模型,'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.下载188bet金宝搏Products(1)。InitialAmount = 1000;% y2在反应2中设置新物种的初始数量单位r2.下载188bet金宝搏Products(1)。InitialAmountUnits =“狼”% y2

将反应3添加到模型对象

R3 =地址(模型,'y2 -> z'
r3 = SimBiology反应阵列索引:反应:1 y2 -> z
%添加“假”单位垃圾变量“z”r3.下载188bet金宝搏Products(1)。InitialAmountUnits =“amountDimension”设置反应3的动力学定律。。Kl3 = addkineticlaw(r3,“MassAction”);为反应添加速率常数参数c3,值为10P3 = addparameter(kl3,“c3”“价值”10);kl3。ParameterVariableNames = {“c3”};添加单位到c3p3。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

显示物种对象

模型。物种
单位:1 C x 1 food 2c y1 1000 rabbit 3c y2 1000 coyote 4c z0 amountDimension

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

Cs = getconfigset(模型,“活跃”);cs。SolverType =“ssa”;cs。StopTime = 30;c . solveroptions . logdecimation = 200;c . compileoptions . unitconversion = true;[t,X] = sbiosimulation(模型);plot(t, X(:,2), t, X(:,3));传奇(“日元”“日元”);标题(“洛特卡-沃尔泰拉反应-国家历史”);ylabel (“捕食者-被捕食者的数量”);网格

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

显示Y1到Y2的相位肖像

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

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

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