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 (“捕食者-被捕食者的数量”);网格在;
显示Y1到Y2的相位肖像
情节(X (:, 2) X (:, 3));标题(“Lotka-Volterra反应- Y1 vs. Y2”);包含(“Y1兔子的数量”);ylabel (“Y2土狼的数量”);
清理单位。sbioremovefromlibrary (“单位”,“兔子”);sbioremovefromlibrary (“单位”,“狼”);sbioremovefromlibrary (“单位”,“食物”);sbioremovefromlibrary (“单位”,“amountDimension”);