主要内容

createSimFunction(模型)

创建SimFunction对象

描述

例子

F= createSimFunction (模型参数个数可见创建一个SimFunction对象F你可以像函数句柄一样执行。的参数个数而且可见参数定义函数的输入和输出F当执行时,和定义物种的剂量信息。看到SimFunction对象有关如何执行的详细信息F

例子

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

例子

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

请注意

  • 活性剂量和模型的变体被忽略F是执行。

  • F在创建后是不可变的。

  • F在第一次函数执行时自动加速,除非您设置AutoAccelerate.如果希望在部署应用程序中加速该对象,则手动加速该对象。

输入参数

全部折叠

SimBiology模型,指定为SimBiology模型对象

函数使用sameconfigset的副本来设置Configset对象的模型对象。但是,该函数忽略了以下内容configset设置:StatesToLogOutputTimesStopTime,SensitivityAnalysisOptions因为这些设置是由函数的其他输入提供的。

SimFunction的输入F,指定为字符向量,字符向量的单元格数组,空单元格数组{},或SimBiology。场景对象。字符向量表示定义输入的模型数量(物种、隔间或参数)的名称F.使用空单元格数组{}或空场景对象SimBiology.Scenarios.empty ()要创建SimFunction对象它没有参数。

要明确地命名模型数量,请使用限定名称,其中包括隔间的名称。若要命名反应作用域的参数,请使用反应名称限定参数。如果名称不是有效的MATLAB®变量名,用方括号括起来,如反应[1]。参数[1]

SimFunction输出F,指定为字符向量或字符向量的单元格数组。字符向量表示模型数量的名称(物种、隔间或参数)或可观测的的输出F

剂量物种或剂量对象,指定为字符向量、字符向量的单元格数组、剂量对象的向量或空数组[]

如果是的话[],除非指定a,否则在模拟过程中没有物种的剂量场景对象,该对象的项中定义了剂量。

如果它是字符向量的单元格数组,它必须是1 × -N数组,N是剂量物种名称的数量。如果你打算使用,你可以使用重复的物种名称多剂当你运行SimFunction时,相同的物种F.仅使用剂量物种名称不包含剂量特性的信息。如果你有一个剂量对象,它包含参数化属性,例如,使用剂量对象作为输入,而不仅仅是物种名称,将这些参数信息传递给创建的SimFunctionF

如果它是一个剂量物体的矢量,它必须是1 × -N向量,N是剂量对象的数量。如果剂量对象具有具有非默认数值的属性,则忽略这些值并发出警告。只有TargetNameDurationParameterNameLagParameterName,参数化属性用于创建SimFunction对象F,即定义的属性F.有关如何属性表已填充,请参见产权总结

创建过程中指定的剂量信息SimFunction对象必须与执行该对象期间指定的剂量信息一致。换句话说,元素的个数的属性SimFunctionF必须等于输入的剂量的总和场景对象φ剂量在输入参数u当你执行对象时。

替代模型值,指定为变量对象的变量或向量。时,这些值将作为模型基线值应用SimFunction对象被创建。如果有多个变量引用同一个模型元素,则使用最后一个。

名称-值参数

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

在R2021a之前,使用逗号分隔每个名称和值,并将其括起来的名字在报价。

例子:“UseParallel”,真的指定执行SimFunctionF并行执行。

标志来执行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”而且“没有”“一半”,或“全部”

  • “没有”-没有标准化(默认)

  • “一半”-仅相对于分子的归一化

  • “全部”-完全去维化

详细信息请参见归一化

例子:“SensitivityNormalization”“全部”

输出参数

全部折叠

返回的SimFunctionSimFunction对象SimFunctionSensitivity对象.你可以执行F就像一个函数句柄。

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

例子

全部折叠

本例采用一阶反应的放射性衰变模型 d z d t c x ,在那里x而且z是物种和c是正向速率常数。

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

sbioloadprojectradiodecay

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

f = create imfunction (m1,“Reaction1.c”“x”[])
f = SimFunction参数:值类型单位名称  _______________ _____ _____________ ____________ {' Reaction1.c“0.5}{“参数”}{' 1 /二}可见:单位名称类型  _____ ___________ ____________ {' x '}{“物种”}{}“分子”前:没有TimeUnits:秒

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

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

Cs = getconfigset(m1);cs.CompileOptions.UnitConversion = false;

创建SimFunction对象,并注意变量命名为单位就消失了。

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

如果模型中的任何物种正在被添加剂量,则将添加剂量的物种的名称指定为最后一个参数。例如,如果物种x,将它指定为最后一个参数。

f = createSimFunction(m1, {“Reaction1.c”}, {“x”},“x”
f = SimFunction参数:值类型名称  _______________ _____ _____________ {' Reaction1.c“0.5}{}“参数”可见:名称类型  _____ ___________ {' 前x '}{“物种”}:TargetName  __________ {' x '}

一旦SimFunction对象创建后,可以像函数句柄一样执行它,并执行参数扫描(如果有并行计算工具箱™,则是并行扫描)、蒙特卡罗模拟,以及使用多个剂量或向量化剂量进行扫描。看到SimFunction对象更多例子。

此示例创建一个SimFunction对象添加剂量信息RepeatDoseScheduleDose对象或这些对象的向量。但是,如果任何剂量对象包含诸如开始时间,时,忽略该数据,并发出警告。只有数据,如果可用,使用TargetNameLagParameterName,DurationParameterName剂量对象的。

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

sbioloadprojectradiodecay

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

Rdose = sbiodose(“路”);rdose。TargetName =“x”;rdose。StartTime = 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)
警告:DOSED中的某些Dose对象有数据。该数据将被忽略。>在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]描述的Lotka-Volterra(捕食者-猎物)模型的参数。

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

sbioloadproject洛特卡

创建一个SimFunction对象fc1而且c2作为要扫描的输入参数,和日元而且y2作为函数的输出,没有掺杂物质。

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

定义一个包含每个参数值的输入矩阵(c1而且c2)。行数表示模拟的总数,每个模拟使用每行中指定的参数值。

Phi = [10 0.01;十0.02);

运行仿真直到停止时间为5,并绘制仿真结果。

sbioplot (f(φ,5));

图中包含一个轴对象。带有标题States vs . Time的axes对象包含4个类型为line的对象。这些对象表示运行1 - y1,运行1 - y2,运行2 - y1,运行2 - y2。

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

T_stop = [3;6];sbioplot (f(φ,t_stop));

图中包含一个轴对象。带有标题States vs . Time的axes对象包含4个类型为line的对象。这些对象表示运行1 - y1,运行1 - y2,运行2 - y1,运行2 - y2。

接下来,将输出时间指定为一个向量。

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

图中包含一个轴对象。带有标题States vs . Time的axes对象包含4个类型为line的对象。这些对象表示运行1 - y1,运行1 - y2,运行2 - y1,运行2 - y2。

将输出时间指定为向量单元格数组。

T_output = {0:0.01: 3,0:0.2:6};Sbioplot (f(phi, [], [], t_output));

图中包含一个轴对象。带有标题States vs . Time的axes对象包含4个类型为line的对象。这些对象表示运行1 - y1,运行1 - y2,运行2 - y1,运行2 - y2。

这个例子展示了如何计算Lotka-Volterra模型中某些物种的局部敏感性SimFunctionSensitivity对象。

加载示例项目。

sbioloadproject洛特卡

定义输入参数。

参数= {“Reaction1.c1”“Reaction2.c2”};

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

可观测值= {“日元”“日元”};

创建一个SimFunctionSensitivity对象。设置所有物种的灵敏度输出因子(日元而且y2)。可见中的参数和输入因子参数个数参数(c1而且c2)通过将名称-值对参数设置为“所有”

f = createSimFunction(m1,params,observables,[],“SensitivityOutputs”“所有”“SensitivityInputs”“所有”“SensitivityNormalization”“全部”
f = SimFunction参数:值类型名称  ________________ _____ _____________ {' Reaction1。c1'} 10{'参数'}{'反应2。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

通过执行对象计算灵敏度c1而且c2分别设置为10和0.1。设置输出次数从1到10。t包含时间点,y包含模拟数据和sensMatrix灵敏度矩阵是否包含的灵敏度日元而且y2关于c1而且c2

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

检索时间点5的灵敏度信息。

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

一排排的sensMatrix2表示输出因子(日元而且y2).列表示输入因子(c1而且c2).

年代 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,outputs,inputs] = getsensmatrix(sd);

绘制物种的敏感性图日元而且y2关于c1

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

图中包含一个轴对象。axis对象的标题为物种y1和y2相对于参数c1的敏感性,包含2个类型为line的对象。这些向量表示y1 y2。

绘制物种的敏感性图日元而且y2关于c2

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

图中包含一个轴对象。标题为sensitivity of species y1和y2的axis对象相对于参数c2包含2个类型为line的对象。这些向量表示y1 y2。

或者,您可以使用sbioplot

sbioplot (sd);

图中包含一个轴对象。带有标题States vs . Time的axes对象包含6个类型为line的对象。这些对象代表y1, y2, d[y1]/d[反动1。c1), d (y2) / d (Reaction1。c1), d (y1) / d (Reaction2。c2],d[y2]/d[Reaction2.c2].

您还可以使用计算灵敏度的时间积分绘制灵敏度矩阵日元而且y2.图表显示日元而且y2更敏感c1c2

[~, in, out] = size(y);结果= 0 (in, out);I = 1:inj = 1:结果(i, j) = trapz (t (:), abs (y (:, i, j)));结束结束图;Hbar = bar(结果);haxes = hbar(1).Parent;hax。XTick = 1:长度(输出);hax。XTickLabel =输出;传奇(输入,“位置”“NorthEastOutside”);ylabel (“敏感”);

图中包含一个轴对象。axis对象包含2个bar类型的对象。这些对象代表了反动1。c1, Reaction2.c2。

这个例子展示了如何模拟正常和糖尿病受试者的葡萄糖-胰岛素反应。

加载葡萄糖-胰岛素反应模型。关于型号的详细信息,请参见背景部分模拟葡萄糖-胰岛素反应

sbioloadproject (“insulindemo”“m1”

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

变量= getvariant(m1);

获取2型糖尿病患者的初始条件。

Type2 =变体(1)
type2 = SimBiology变体- 2型糖尿病(不活跃)内容索引:类型:名称:属性:值:1参数血浆容量…取值1.49 2参数k1取值0.042 3参数k2取值0.071 4参数血浆体积…参数值0.04 5参数m1参数值0.379 6参数m2参数值0.673 7参数m4参数值0.269 8参数m5参数值0.0526 9参数m6参数值0.8118 10参数取值0.6 11参数kmax取值0.0465 12参数kmin取值0.0076 13参数kbs取值0.023 14参数kgri取值0.0465 15参数f取值0.9 16参数a取值6e-05 17参数b取值0.68 18参数c取值0.00023 19参数d取值0.09 20参数kp1取值3.09 21参数kp2取值0.0007 22参数kp3取值0.005 23参数kp4取值0.0786 24参数ki取值0.0066 25参数[Ins Ind Glu U…1 26参数Vm0值4.65 27参数Vmx值0.034 28参数Km值466.21 29参数p2U值0.084 30参数K值0.99 31参数alpha值0.013 32参数beta值0.05 33参数gamma值0.5 34参数ke1值0.0007 35参数ke2值269 36参数基础等离子体G…值164.18 37参数基底血浆I…价值54.81

抑制在模拟过程中发出的信息警告。

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

创建SimFunction对象来模拟正常和糖尿病受试者的葡萄糖-胰岛素反应。

  • 指定一个空数组{}对于第二个输入参数,表示将使用基本参数值模拟模型(即,不执行参数扫描)。

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

  • 指定物种剂量作为被剂量的物种。这个物种代表模拟开始时葡萄糖的初始浓度。

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

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

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

在模拟开始时,选择代表单餐78克葡萄糖的剂量。

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

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

mealTable = getttable (singleMeal);

模拟正常人24小时的葡萄糖-胰岛素反应。

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

图中包含一个轴对象。带有标题States vs . Time的axes对象包含2个line类型的对象。这些对象表示葡萄糖外观。血浆Glu Conc,胰岛素分泌。等离子体合成。

模拟糖尿病患者24小时的葡萄糖-胰岛素反应。

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

图中包含一个轴对象。带有标题States vs . Time的axes对象包含2个line类型的对象。这些对象表示葡萄糖外观。血浆Glu Conc,胰岛素分泌。等离子体合成。

使用变体执行扫描

假设您希望使用包含不同胰岛素损伤的不同初始条件的变体数组执行参数扫描。例如,模型m1具有对应于低胰岛素敏感性和高胰岛素敏感性的变体。您可以通过对SimFunction对象的一次调用来模拟这两种情况的模型。

选择要扫描的变体。

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

检查每个变量中存储了哪些模型参数。

varToScan (1)
ans = SimBiology Variant - Low insulin sensitivity (inactive)内容索引:类型:名称:属性:值:1参数Vmx值0.0235 2参数kp3值0.0045
varToScan (2)
ans = SimBiology Variant - High insulin sensitivity (inactive)内容索引:类型:名称:属性:值:1参数Vmx值0.094 2参数kp3值0.018

的两个变量都存储替代值Vmx而且kp3参数。在创建SimFunction对象时,需要将它们指定为输入参数。

创建一个SimFunction对象来扫描变量。

variantScan = createSimFunction(m1,{“Vmx”“kp3”},...【Plasma Glu Conc】《等离子体》},“剂量”);

模拟模型并绘制结果。运行1包括低胰岛素敏感性的模拟结果和运行2对于高胰岛素敏感性。

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

图中包含一个轴对象。带有标题States vs . Time的axes对象包含4个类型为line的对象。这些对象表示运行1 -葡萄糖外观。血浆Glu Conc, Run 1 -胰岛素分泌。血浆Ins Conc, Run 2 -葡萄糖外观。血浆Glu Conc, Run 2 -胰岛素分泌。等离子体合成。

低胰岛素敏感性导致血糖浓度升高和延长。

恢复警告设置。

警告(warnSettings);

参考文献

吉莱斯皮,D.T.(1977)。耦合化学反应的精确随机模拟。物理化学学报。81(25),2340-2361。

扩展功能

版本历史

在R2014a中引入