规则的定义和评估SimBiology模型
概述
规则允许您定义或修改模型的数学表达式,即舱容量,物种数量,或参数值。
规则可以采取最初的形式作业,作业过程中模拟(重复作业),代数关系或微分方程(利率规则)。细节描述的每种类型的统治下。
初始赋值
初始赋值规则允许您指定数量模型的初始值作为一个数值或其他的函数模型。它是模拟初评估一次。
初始赋值规则表示为变量=表达式
,被指定为规则表达式
。例如,您可以编写一个初始赋值规则集的初始金额species2
是成正比的species1
作为species2 = k * species1
在哪里k
是一个常数参数。
重复作业
重复赋值规则允许您指定数量的价值作为一个数值或其他数量反复模拟的函数。这是评估在每一个时间步,由仿真过程中解决。
重复赋值规则表示为变量=表达式
,被指定为规则表达式
。例如,反复总结评估总物种数量的物种在不同的隔间,您可以输入:xTotal = c1。X + c2.X
,在那里xTotal
是一个非常数的参数,c1
和c2
的名字是x物种所在的车厢里。
代数规则
数学约束一个代数规则允许您指定一个或多个模型数量,必须保持在一个模拟世界中。它是评估持续在一个模拟世界中。
一个代数规则形式0 =表达式
,被指定为规则表达式
。例如,如果你有一个质量守恒方程等species_total = species1 + species2
,编写相应的代数规则species1 + species2 - species_total
。
然而,重复分配规则是数学等价的代数规则,而是导致精确解的近似解。金宝搏官方网站因此,建议您使用尽可能重复赋值规则而不是代数规则。只有当使用代数规则:
你不能分析解决方程得到封闭解。例如,没有封闭的解决方案
x ^ 4 + ax ^ 3 + bx ^ 2 + cx + k = 0
而封闭的解决方案kx - c = 0
是x = c / k
。你有多个方程与多个未知数,他们可能不方便解决。
如果你使用一个代数规则,利率规则,或重复赋值改变一个参数的值或舱模拟,确保ConstantValue
属性的参数或ConstantCapacity
室的设置假
。
重复的任务和代数规则
重复分配规则是数学等价的代数规则,但导致精确解。金宝搏官方网站然而,数值求解代数规则,和准确性取决于误差仿真设置中规定的公差。此外,有几个优势重复赋值规则如更好的计算性能,更准确的结果,因为没有规则必须解决数值(因此没有近似),和灵敏度分析的支持。金宝app
提示
如果你能分析求解一个变量,使用重复赋值规则而不是一个代数规则。
在重复分配规则,约束变量显式定义的左边,而在代数规则推断从方程组的自由度。另请参阅考虑当施加约束。
利率规则
利率规则代表一个微分方程和允许您指定的时间导数模型数量。它是评估持续在一个模拟世界中。
规则表示为
,这是在SimBiology表示变量=表达式
。例如,如果你有一个物种的微分方程x,
,写规则为:x = k * (y + z)
。
更多的例子,请参阅利率规则的例子。
评估规则的顺序
模拟开始时(即,在仿真时间= 0),SimBiology®评估初始赋值和重复赋值为一组联立约束规则。SimBiology将规则作为一个统一系统的约束和自动重组和评估他们。规则的顺序出现在模型对仿真结果没有影响。
如果数量被赋值规则,修改规则取代初始值属性,如InitialAmount
,能力
,或价值
。同样,改变这样的一个变体数量没有影响,因为价值是取代分配规则。
SimBiology抛出一个错误如果模型在初始分配和循环依赖重复分配规则。换句话说,最初的任务和重复作业不能有一个变量显式或隐式引用在左边和右边的方程。
例如,您不能创建圆形集等作业a = b + 1
和b = a + 1
,在那里一个和b显式地引用两岸的方程。隐式引用的一个例子是当一个赋值规则引用一个物种的浓度。在这种情况下,包含物种间隐式引用。
警告
你可以观察不同的仿真结果对初始分配SimBiology之前发布的版本(R2017a或更早)。恢复相同的仿真结果在时间= 0,如R2017a或更早,使用updateInitialAssignments
在命令行功能。如果您正在使用SimBiology从应用程序,右键单击模型项目工作空间并选择删除顺序依赖关系。
在模拟量守恒
在模拟(即在模拟时间> 0),SimBiology保存物种数量而不是浓度是否有任何变化的体积间物种居住的地方。换句话说,如果你有一个规则或一个事件的重复任务,改变体积,然后你看到保护物种数量在时间的影响> 0。
然而,在模拟的开始(也就是说,在仿真时间= 0),数量守恒的概念并不适用,因为之前没有改变时间= 0。只存在一组初始条件和SimBiology使用条件的模拟。具体来说,在时间= 0,SimBiology:
初始化变量的物种,隔间,并使用相应的参数
InitialAmount
,能力
,价值
属性。更新的值代之以相应的替代值变异,如果任何。
更新的值通过评估初始赋值和重复赋值为一组联立约束规则。因此,分配规则取代初始值如果模型数量正在修改这些规则或变异。
警告
在以前的版本(R2017a或更早),如果重复作业改变了舱体积,SimBiology舱容量来确定初始使用数量和保存室体积改变时时候= 0。在R2017b或后,SimBiology使用InitialAmount
财产的物种作为初始条件在时间= 0。考虑下面的模型。
m = sbiomodel (“m1”)v = addcompartment (m,“v”10“ConstantCapacity”0,“CapacityUnit”,“升”)p = addparameter (m,“p”,“ValueUnit”,“升”)r = addrule (m,“v = 100 * p”,“repeatedAssignment”)s = addspecies (v,“年代”,50岁,“InitialAmountUnit”,毫克/升的)
50毫克/升* 10升= 500毫克
,然后应用重复分配规则v = 100升
。的浓度年代然后计算和报告吗500毫克/ 100 l = 5毫克/升
在时间= 0。
在R2017b或后,SimBiology使用InitialAmount
财产的物种年代和报告的初始金额年代作为50毫克/升
代替。
写作规则表达式
使用MATLAB®语法写规则的数学表达式。注意,不需要分号或逗号结束时一个规则表达式。如果你的代数,重复作业,或利率规则表达式不是连续或可微的,看到的使用事件处理规则和反应速率表达式的不连续性在模拟模型。
考虑当施加约束
假设你有一个物种y
由方程是谁的数量y = x - c m *
。在SimBiology,代数规则来描述这个约束是写成m * x - c - y
。如果你想使用这条规则确定的价值y
,然后米
,x
,c
必须是变量或常量的值是已知或由其他方程。因此,您必须确保方程组不蔡明俊或underconstrained。例如,如果你有更多的方程比未知数,那么系统蔡明俊。相反,如果你有更多未知数的方程,然后系统underconstrained。
提示
underconstrained系统的行为可以通过添加额外的规则或通过设置固定ConstantValue
或ConstantCapacity
或ConstantAmount
房地产的一些组件的模型。
利率规则的例子
下面的例子展示了如何为不同的应用程序创建利率规则。
创建一个速率恒定速率的变化规则
这个例子展示了如何增加或一个物种的浓度恒定值用零级速度法则。例如,假设物种x
增加一个恒定的速度k
。变化的速度是:
设置初始数量的物种x
2,参数的值k
为1。使用以下命令设置相应SimBiology模型和模拟。
m = sbiomodel (“米”);c = addcompartment (m,“薪酬”);s = addspecies (m,“x”,“InitialAmount”2);p = addparameter (m,“k”,“价值”1);r = addrule (m,“x = k ',“RuleType”,“速度”);[t, sd,物种]= sbiosimulate (m);情节(t, sd);传奇(物种)包含(“时间”);ylabel (物种数量的);
或者,你可以模型常数增加一个物种使用质量作用的反应零
- >x
与远期利率不变k
。
明确的m = sbiomodel (“米”);c = addcompartment (m,“薪酬”);s = addspecies (m,“x”,“InitialAmount”2);r = addreaction (m,“零- > x”);kl = addkineticlaw (r,“MassAction”);p = addparameter (kl、“k”,“价值”1);kl.ParameterVariableNames =“k”;[t, sd,物种]= sbiosimulate (m);情节(t, sd);传奇(物种)包含(“时间”);ylabel (物种数量的);
创建一个规则指数变化率
这个例子展示了如何改变的一种类似于使用一阶一阶反应速度法则。例如,假设该物种x
指数衰减。物种的变化率x
是:
分析解决方案是:
在哪里 物种的数量在时间t, 是初始金额。使用以下命令设置相应SimBiology模型和模拟。
m = sbiomodel (“米”);c = addcompartment (m,“薪酬”);s = addspecies (m,“x”,“InitialAmount”2);p = addparameter (m,“k”,“价值”1);r = addrule (m,“x = - k *”,“RuleType”,“速度”);[t, sd,物种]= sbiosimulate (m);情节(t, sd);传奇(物种);包含(“时间”);ylabel (物种数量的);
如果一个物种的数量x
是由规则和速度x
也是在一个反应,x
必须有它BoundaryCondition
属性设置为真正的
。例如,一个反应x - >
和规则
,设置BoundaryCondition
财产的物种x
来真正的
所以,微分项不是创建的反应。的数量x
决定完全由微分率术语的规则。如果BoundaryCondition
属性设置为假
,你会得到以下错误消息等无效的规则在规则或反应速率变量“x”
。
创建一个利率规则定义一个微分方程
许多数学模型和微分率方程描述的文学种类。你可以手动转换方程反应,或者你可以输入方程作为利率规则。例如,您可以输入以下微分速率方程的一个物种C
:
在SimBiology作为利率规则:C = vi - (vd * X * C) / (Kc + C) - kd * C
创建一个利率规则变化的速率,是由另一个物种
这个例子展示了如何创建一个规则,一个物种从一个反应速率可以决定另一个反应的速度如果在第二反应速率方程。同样,一个物种从一个反应可以确定的另一个物种,如果是其他物种的利率规则定义。假设您有一个SimBiology模型有三个物种(一个
,b
,c
),一个反应(a - >
),两个参数(k1
和k2
)。速率方程的定义是
,利率规则
。反应的物种的解决方案是:
, 。
由于利率规则 依赖于反应, 。解决方案是:
输入以下命令来设置相应SimBiology模型和模拟。
m = sbiomodel (“米”);c = addcompartment (m,“薪酬”);s1 = addspecies (m,“一个”,“InitialAmount”10“InitialAmountUnits”,“鼹鼠”);s2 = addspecies (m,“b”,“InitialAmount”0,“InitialAmountUnits”,“鼹鼠”);s3 = addspecies (m,“c”,“InitialAmount”5,“InitialAmountUnits”,“鼹鼠”);rxn = addreaction (m,“a - >”);kl = addkineticlaw (rxn,“MassAction”);p1 = addparameter (kl,“k1”,“价值”,1“ValueUnits”,“1 /秒”);规则= addrule (m,“c = k2 *”,“RuleType”,“速度”);kl.ParameterVariableNames =“k1”;p2 = addparameter (m,“k2”,“价值”,1“ValueUnits”,“1 /秒”);[t, sd,物种]= sbiosimulate (m);情节(t, sd);传奇(物种);包含(“时间”);ylabel (物种数量的);