主要内容

createSimFunction(模型)

创建SimFunction对象

描述

例子

F= createSimFunction (模型,参数个数,可见,)创建一个SimFunction对象F你可以执行像一个函数处理。的参数个数可见参数定义函数的输入和输出F当它执行定义了物种的定量信息。看到SimFunction对象有关如何执行F

例子

F= createSimFunction (模型,参数个数,可见,,变体)创建一个SimFunction对象、应用中存储的值变体不同对象的向量,作为模型的基线值。

例子

F= createSimFunction (___,名称,值)使用指定的一个或多个额外的选项名称,值对参数。

请注意

  • 活跃的剂量和变异的模型时忽略F是执行。

  • F创建后是不可变的。

  • F在第一个函数自动加速执行,除非你准备好了吗AutoAccelerate。手动加速对象如果你想它加速部署应用程序。

输入参数

全部折叠

作为一个SimBiology SimBiology模型,指定模型对象

使用相同的功能configset设置通过的一个副本Configset对象的模型对象。然而,忽略了以下功能configset设置:StatesToLog,OutputTimes,StopTime,SensitivityAnalysisOptions因为这些设置其他输入提供的功能。

输入的SimFunctionF单元阵列指定为一个特征向量,特征向量,空单元阵列{},或SimBiology.Scenarios对象。模型的特征向量代表名称数量(物种、车厢或参数)定义的输入F。使用一个空单元数组{}或空场景对象SimBiology.Scenarios.empty ()创建一个SimFunction对象没有参数。

明确的名字一个模型数量、使用限定名称,其中包括舱的名称。名字reaction-scoped参数,使用反应名称参数。如果名称不是一个有效的MATLAB®变量的名字,等方括号环绕着它反应[1]。参数[1]

输出SimFunctionF,指定为一个字符特征向量的向量或单元阵列。模型的特征向量代表名称数量(物种、车厢或参数)或可观测的对象定义的输出F

给物种或剂量对象,指定为一个特征向量,单元阵列的特征向量,向量的剂量对象,或空数组[]

如果它是[],不给在模拟物种,除非你指定一个场景对象定义了剂量的条目。

如果它是一个单元阵列的特征向量,它必须1×-N数组,N是给物种的数量名称。您可以使用重复的物种名称如果您计划使用多剂为同一物种当您运行SimFunctionF。只使用剂量给物种名称不包含信息的属性。如果你有一个包含剂量对象参数化属性,如,使用剂量对象作为输入,而不只是物种名称等参数信息转移到SimFunction创建F

如果剂量对象是一个向量,它必须是1 -N向量,N剂量对象的数量。如果剂量非默认数值对象有属性,这些值将被忽略和发出的一个警告。只有TargetName,DurationParameterName,LagParameterName,参数化属性用于创建SimFunction对象F,来定义的的属性F。的细节填充属性表,请参阅产权总结

您指定的计量信息的创建SimFunction对象必须符合计量信息执行期间您指定的对象。换句话说,元素的数量的属性SimFunctionF必须等于输入剂量的组合数量场景对象φ和剂量输入参数u当您执行对象。

替代模型值,指定为一个变量或变量对象的向量。这些值作为模型应用于基线值时SimFunction创建对象。如果有多个变体指相同的模型元素,最后发生。

名称-值参数

指定可选的双参数作为Name1 = Value1,…,以=家,在那里的名字参数名称和吗价值相应的价值。名称-值参数必须出现在其他参数,但对的顺序无关紧要。

R2021a之前,用逗号来分隔每一个名称和值,并附上的名字在报价。

例子:“UseParallel”,真的指定了SimFunction执行F并行执行。

国旗执行SimFunctionF同时,指定为逗号分隔组成的“UseParallel”真正的。如果真正的和并行计算工具箱™可用,SimFunctionF是并行执行的。

例子:“UseParallel”,真正的

国旗加速模型的第一评价SimFunction对象,指定为逗号分隔组成的“AutoAccelerate”真正的

将值设置为如果你有一个快速模型来模拟,因为模型的加速度可能需要更长的时间比实际的仿真模型。

例子:“AutoAccelerate”,

灵敏度输出因素,指定为逗号分隔组成的“SensitivityOutputs”单元阵列的特征向量。特征向量是模型数量(物种和参数)的名字你想计算敏感性。默认值是{}意思没有输出因素。输出时间的因素是分子衍生品中解释敏感性分析在SimBiology

使用关键字“所有”“所有”指定所有的模型数量敏感性输出。然而,{'所有'}意味着一个模型数量所有在模型中。(“所有”、“x”)设置输入因素或输出因素敏感性物种命名所有x

您必须指定两个“SensitivityOutputs”“SensitivityInputs”名称-值对参数的灵敏度计算。

例子:“SensitivityOutputs”,“所有”

灵敏度的输入因素,指定为逗号分隔组成的“SensitivityInputs”单元阵列的特征向量。模型的特征向量是名称数量(物种、隔间和参数)对你想计算敏感性。默认值是{}意思没有输入因素。输入因素是时间的分母衍生品中解释敏感性分析在SimBiology

使用关键字“所有”“所有”指定所有的模型数量敏感性输出。然而,{'所有'}意味着一个模型数量所有在模型中。(“所有”、“x”)设置敏感物种命名的输入或输出所有x

您必须指定两个“SensitivityOutputs”“SensitivityInputs”名称-值对参数的灵敏度计算。

例子:“SensitivityInputs”,{“Reaction1.c1”、“Reaction1.c2”}

归一化计算敏感性,指定为逗号分隔组成的“SensitivityNormalization”“没有”,“一半”,或“全部”

  • “没有”——没有正常化(默认)

  • “一半”——标准化相对于分子

  • “全部”——全dedimensionalization

有关详细信息,请参见归一化

例子:“SensitivityNormalization”,“全部”

输出参数

全部折叠

SimFunction,作为一个返回SimFunction对象SimFunctionSensitivity对象。你可以执行F像一个函数处理。

F是一个SimFunctionSensitivity对象如果您指定非空“SensitivityOutputs”“SensitivityInputs”名称-值对参数。

例子

全部折叠

这个示例使用放射性衰变模型与一阶反应 d z d t = c x ,在那里xz物种和c远期汇率是常数。

加载包含放射性衰变模型的示例项目m1

sbioloadprojectradiodecay;

创建一个SimFunction对象,指定参数Reaction1.c扫描,物种x作为函数的输出没有给物种。

f = createSimFunction (m1,“Reaction1.c”,“x”[])
f = SimFunction参数:名称值类型单位售予_____ _________________ _______ {Reaction1。c'} 0.5 {'parameter'} {'1/second'} Observables: Name Type Units _____ ___________ ____________ {'x'} {'species'} {'molecule'} Dosed: None TimeUnits: second

如果UnitConversion选项设置为SimFunction对象f创建,表不显示模型的单位数量。

为了说明这一点,首先设置UnitConversion选项

c = getconfigset (m1);cs.CompileOptions。UnitConversion=假;

创建SimFunction之前和注意对象变量命名单位就消失了。

f = createSimFunction (m1, {“Reaction1.c”},{“x”},[])
f = SimFunction参数:名称值类型售予_____ _________________ {Reaction1。0.5 c '}{}“参数”可见:名称类型_____ ___________ {x}{“物种”}给:没有

如果任何种类的模型前,指定给物种的名字作为最后一个参数。例如,如果物种x前,作为最后一个参数指定它。

f = createSimFunction (m1, {“Reaction1.c”},{“x”},“x”)
f = SimFunction参数:名称值类型售予_____ _________________ {Reaction1。c'} 0.5 {'parameter'} Observables: Name Type _____ ___________ {'x'} {'species'} Dosed: TargetName __________ {'x'}

一旦SimFunction创建对象时,您可以执行它像一个函数处理和执行参数扫描(并行如果并行计算工具箱™可用),蒙特卡罗模拟,与多个扫描矢量化剂。看到SimFunction对象更多的例子。

这个示例创建了一个SimFunction对象与使用剂量信息RepeatDoseScheduleDose这些对象的对象或一个向量。然而,如果任何剂量对象包含数据等开始时间,,这些数据将被忽略,发出的一个警告。只有数据,如果可用,使用TargetName,LagParameterName,DurationParameterName剂量的对象。

加载包含放射性衰变模型的示例项目m1

sbioloadprojectradiodecay;

创建一个RepeatDose对象并指定其属性。

rdose = sbiodose (“路”);rdose。TargetName =“x”;rdose。开始时间= 5;rdose。TimeUnits =“第二”;rdose。数量= 300;rdose。AmountUnits =“分子”;rdose。率=1;rdose。率单位=“分子/秒”;rdose。间隔= 100;rdose。RepeatCount = 2;

添加一个滞后参数和持续时间对模型参数。

lagPara = addparameter (m1,“资讯”);lagPara。价值=1;lagPara。价值单位=“第二”;duraPara = addparameter (m1,“迪拜”);duraPara。价值=1;duraPara。价值单位=“第二”;

剂量对象设置这些参数。

rdose。LagParameterName =“资讯”;rdose。DurationParameterName =“迪拜”;

创建一个SimFunction对象f使用RepeatDose对象rdose你刚刚创建的。

f = createSimFunction (m1, {“Reaction1.c”},{“x”,“z”},rdose)
警告:在给一些剂量对象数据。这些数据将被忽略。>在SimFunction > SimFunction。SimFunction一个t847 In SimFunction>SimFunction.createSimFunction at 374 f = SimFunction Parameters: Name Value Type Units _____________ _____ ___________ __________ 'Reaction1.c' 0.5 'parameter' '1/second' Observables: Name Type Units ____ _________ __________ 'x' 'species' 'molecule' 'z' 'species' 'molecule' Dosed: TargetName TargetDimension __________ _______________________________ 'x' 'Amount(e.g. mole or molecule)' DurationParameterName DurationParameterValue _____________________ ______________________ 'dp' 1 DurationParameterUnits LagParameterName ______________________ ________________ 'second' 'lp' LagParameterValue LagParameterUnits _________________ _________________ 1 'second'

会出现一个警告消息,因为rdose对象包含数据(开始时间,,)所忽略的createSimFunction方法。

这个例子展示了如何执行不同的签名SimFunction对象生态模拟和扫描参数(捕食)模型描述Gillespie [1]。

加载包含模型的示例项目m1

sbioloadproject洛特卡;

创建一个SimFunction对象fc1c2作为输入参数被扫描,日元y2作为函数的输出没有给物种。

f = createSimFunction (m1, {“Reaction1.c1”,“Reaction2.c2”},{“日元”,“日元”},[])
f = SimFunction参数:名称值类型___________ _____ _________________ {Reaction1。c1的10}{“参数”}{Reaction2。c2'} 0.01 {'parameter'} Observables: Name Type ______ ___________ {'y1'} {'species'} {'y2'} {'species'} Dosed: None

定义一个输入矩阵,包含每个参数的值(c1c2为每个模拟)。显示的行数的总数模拟,并且每个模拟使用每一行中指定的参数值。

φ= [10 0.01;十0.02);

运行模拟,直到停止时间5和仿真结果。

sbioplot (f(φ,5));

图包含一个坐标轴对象。坐标轴对象与标题和时间,包含时间,ylabel州包含4线类型的对象。这些对象代表1 - y1运行,运行1 - y2,运行2 - y1, y2 2 -运行。

您还可以指定一个向量为每个模拟不同的终止时间。

t_stop = (3、6);sbioplot (f(φ,t_stop));

图包含一个坐标轴对象。坐标轴对象与标题和时间,包含时间,ylabel州包含4线类型的对象。这些对象代表1 - y1运行,运行1 - y2,运行2 - y1, y2 2 -运行。

接下来,指定输出倍一个向量。

t_output = 0:0.1:5;sbioplot (f(φ,[][],t_output));

图包含一个坐标轴对象。坐标轴对象与标题和时间,包含时间,ylabel州包含4线类型的对象。这些对象代表1 - y1运行,运行1 - y2,运行2 - y1, y2 2 -运行。

指定输出倍单元阵列的向量。

t_output = {0:0.01:3, 0:0.2:6};sbioplot (f(φ,[][],t_output));

图包含一个坐标轴对象。坐标轴对象与标题和时间,包含时间,ylabel州包含4线类型的对象。这些对象代表1 - y1运行,运行1 - y2,运行2 - y1, y2 2 -运行。

这个例子展示了如何计算当地的一些物种生态模型中使用的敏感SimFunctionSensitivity对象。

加载示例项目。

sbioloadproject洛特卡;

定义输入参数。

params = {“Reaction1.c1”,“Reaction2.c2”};

定义观察到的物种,这是模拟的输出。

可见= {“日元”,“日元”};

创建一个SimFunctionSensitivity对象。设置所有物种敏感性输出因素(日元y2)中指定的可见参数和输入因素的参数个数参数(c1c2通过设置名称-值对参数“所有”

f = createSimFunction (m1, params,可见,[],“SensitivityOutputs”,“所有”,“SensitivityInputs”,“所有”,“SensitivityNormalization”,“全部”)
f = SimFunction参数:名称值类型___________ _____ _________________ {Reaction1。c1的10}{“参数”}{Reaction2。c2'} 0.01 {'parameter'} Observables: Name Type ______ ___________ {'y1'} {'species'} {'y2'} {'species'} Dosed: None Sensitivity Input Factors: Name Type ________________ _____________ {'Reaction1.c1'} {'parameter'} {'Reaction2.c2'} {'parameter'} Sensitivity Output Factors: Name Type ______ ___________ {'y1'} {'species'} {'y2'} {'species'} Sensitivity Normalization: Full

计算敏感性通过执行对象c1c2分别设置为10和0.1。设置输出时间从1到10。t包含时间点,y包含仿真数据,sensMatrix的灵敏度矩阵包含敏感吗日元y2关于c1c2

[t y sensMatrix] = f (0.1 [10], [], [], 1:10);

获取敏感信息在时间点5。

temp = sensMatrix {:};sensMatrix2 = temp (t {:} = = 5::);sensMatrix2 =挤压(sensMatrix2)
sensMatrix2 =2×237.6987 -6.8447 -40.2791 5.8225

的行sensMatrix2代表输出因素(日元y2)。列表示输入因素(c1c2)。

年代 e n 年代 一个 t r x 2 = ( y 1 c 1 y 2 c 1 y 1 c 2 y 2 c 2 ]

将停止时间设置为15,没有指定的输出时间。在这种情况下,默认输出时间解决时间点。

sd = f ((10、0.1), 15);

检索计算的敏感性SimData对象sd

[t、y、输出、输入]= getsensmatrix (sd);

情节的敏感的物种日元y2关于c1

图;情节(t y (:,: 1));传奇(输出);标题(敏感的物种y1和y2对参数c1”);包含(“时间”);ylabel (“敏感”);

图包含一个坐标轴对象。坐标轴对象与标题的敏感物种y1和y2对参数c1,包含时间,ylabel敏感性包含2线类型的对象。这些对象代表y1, y2。

情节的敏感的物种日元y2关于c2

图;情节(t y (:,: 2));传奇(输出);标题(“物种y1和y2对参数的敏感性c2的);包含(“时间”);ylabel (“敏感”);

图包含一个坐标轴对象。坐标轴对象与标题物种y1和y2对参数的敏感性c2,包含时间,ylabel敏感性包含2线类型的对象。这些对象代表y1, y2。

或者,您可以使用sbioplot

sbioplot (sd);

图包含一个坐标轴对象。坐标轴对象与标题和时间,包含时间,ylabel州包含6行类型的对象。这些对象代表y1、y2、d (y1) / d (Reaction1。c1), d (y2) / d (Reaction1。c1), d (y1) / d (Reaction2。c2],d(y2]/d[Reaction2.c2].

你也可以画出灵敏度矩阵使用的时间积分计算的敏感性日元y2。情节表明日元y2更敏感的c1c2

(~,,)= (y)大小;结果= 0 (,);i = 1:j = 1:结果(i, j) = trapz (t (:), abs (y (:, i, j)));结束结束图;百巴=酒吧(结果);hax =百巴(1).Parent;hax。XTick = 1:长度(输出);hax。XTickLabel =输出;传奇(输入,“位置”,“NorthEastOutside”);ylabel (“敏感”);

图包含一个坐标轴对象。坐标轴对象2 ylabel灵敏度包含对象类型的酒吧。这些对象代表Reaction1。c1, Reaction2.c2。

这个例子展示了如何为正常但血糖-胰岛素反应模拟和糖尿病科目。

负载glucose-insulin响应的模型。模型的详细信息,请参阅背景部分但血糖-胰岛素响应模拟

sbioloadproject (“insulindemo”,“m1”)

中存储的模型包含不同的初始条件不同的变体。

变量= getvariant (m1);

得到2型糖尿病患者的初始条件。

类型2 =变体(1)
类型2 = SimBiology变体- 2型糖尿病(不活跃)ContentIndex:类型:名称:房地产:价值:1参数等离子体体积……价值1.49 - 2参数k1值.042 3参数k2值.071 4参数等离子体体积……值.04点5参数m1值.379 6参数m2值.673 7参数m4值.269 m6 8参数m5值.0526 9参数值.8118 10参数肝Extrac……价值。6 11参数kmax值.0465 12参数kmin值.0076 13参数出租车值0 14参数kgri值.0465 15 16参数值参数f值。9 6 e-05 17参数b值.68点18 19参数d值参数c值.00023 .09点20参数kp1值3.09 21参数kp2值.0007 22参数kp3值.005 23参数kp4值.0786 24参数ki值.0066 25参数(Ins印第安纳Glu U…价值1.0 26参数Vm0值4.65 27参数Vmx值.034 28参数p2U 29公里价值466.21参数值.084 30参数K值0 31参数α值.013 32参数β值0。33参数γ值5 34参数ke1值.0007 35 36参数基础等离子体参数ke2值269.0 G……值164.18 37参数基础等离子体我…价值54.81

抑制一个信息发出警告,在模拟。

warnSettings =警告(“关闭”,“SimBiology: DimAnalysisNotDone_MatlabFcn_Dimensionless”);

但血糖-胰岛素响应创建SimFunction对象来模拟正常和糖尿病受试者。

  • 指定一个空数组{}第二个输入参数来表示模型将模拟使用基本参数值(也就是说,没有参数扫描将执行)。

  • 指定血浆葡萄糖和胰岛素浓度响应(输出函数的绘制)。

  • 指定物种剂量前的物种。这个物种代表初始葡萄糖浓度的模拟。

normSim = createSimFunction (m1, {},{“(等离子Glu浓缩)”,“(血浆Ins浓缩的)”},“剂量”)
normSim = SimFunction参数:可见:名称类型单位_____________________ ___________ _______________________{'[等离子Glu浓缩]}{“物种”}{毫克/分升的}{'[血浆Ins浓缩的]}{“物种”}{“皮摩尔/升”}给:TargetName TargetDimension __________ _____________________{“剂量”}{的质量(例如,克)}TimeUnits:小时

对于糖尿病患者,指定使用变体的初始条件类型2

diabSim = createSimFunction (m1, {},{“(等离子Glu浓缩)”,“(血浆Ins浓缩的)”},“剂量”类型2)
diabSim = SimFunction参数:可见:名称类型单位_____________________ ___________ _______________________{'[等离子Glu浓缩]}{“物种”}{毫克/分升的}{'[血浆Ins浓缩的]}{“物种”}{“皮摩尔/升”}给:TargetName TargetDimension __________ _____________________{“剂量”}{的质量(例如,克)}TimeUnits:小时

选择一个剂量代表一餐78克葡萄糖的模拟。

singleMeal = sbioselect (m1,“名字”,“一餐”);

将计量信息转换为表格格式。

mealTable =可以获得的(singleMeal);

但血糖-胰岛素响应模拟正常的24小时。

sbioplot (normSim([], 24岁,mealTable));

图包含一个坐标轴对象。坐标轴对象与标题和时间,包含时间,ylabel州包含2线类型的对象。这些对象代表葡萄糖外观。等离子体Glu浓缩的胰岛素分泌。血浆Ins浓缩的。

但血糖-胰岛素响应模拟糖尿病患者24小时。

sbioplot (diabSim([], 24岁,mealTable));

图包含一个坐标轴对象。坐标轴对象与标题和时间,包含时间,ylabel州包含2线类型的对象。这些对象代表葡萄糖外观。等离子体Glu浓缩的胰岛素分泌。血浆Ins浓缩的。

执行扫描使用变体

假设您想执行参数扫描使用变体数组,包含不同的初始条件对不同胰岛素缺陷。例如,模型m1变异,对应于低胰岛素敏感性和高胰岛素敏感性。你可以通过一个模拟的模型条件调用SimFunction对象。

选择要扫描的变体。

varToScan = sbioselect (m1,“名字”,{“低胰岛素敏感性”,“高胰岛素敏感性”});

检查哪些模型参数存储在每个变体。

varToScan (1)
ans = SimBiology变体-低胰岛素敏感性(不活跃)ContentIndex:类型:名称:房地产:值:1参数Vmx值.0235 .0045 kp3 2参数值
varToScan (2)
ans = SimBiology变体-高胰岛素敏感性(不活跃)ContentIndex:类型:名称:房地产:值:1参数Vmx值.094 .018 kp3 2参数值

两个变量存储备用值Vmxkp3参数。你需要指定他们当你创建一个SimFunction对象作为输入参数。

创建一个SimFunction对象扫描变体。

variantScan = createSimFunction (m1, {“Vmx”,“kp3”},{“(等离子Glu浓缩)”,“(血浆Ins浓缩的)”},“剂量”);

模拟模型和阴谋的结果。运行1包括低胰岛素敏感性和仿真结果运行2高胰岛素敏感性。

sbioplot (variantScan(24岁的varToScan mealTable));

图包含一个坐标轴对象。坐标轴对象与标题和时间,包含时间,ylabel州包含4线类型的对象。这些对象代表运行1 -葡萄糖的外观。等离子体Glu浓缩的,跑1 -胰岛素分泌。血浆Ins浓缩的,运行2 -葡萄糖的外观。等离子体Glu浓缩的,跑2 -胰岛素分泌。血浆Ins浓缩的。

低胰岛素敏感性导致血浆葡萄糖浓度增加和延长。

恢复设置的警告。

警告(warnSettings);

引用

[1]Gillespie, D.T. (1977)。的随机模拟耦合化学反应。《物理化学》杂志上。81 (25),2340 - 2361。

扩展功能

版本历史

介绍了R2014a