createSimFunction(模型)
创建SimFunction对象
语法
描述
创建一个F
= createSimFunction (模型
,参数个数
,可见
,给
)SimFunction对象
F
你可以像函数句柄一样执行。的参数个数
而且可见
实参定义函数的输入和输出F
当执行时,和给
定义物种的剂量信息。看到SimFunction对象
有关如何执行的详细信息F
.
请注意
当模型的活性剂量和变量被忽略时
F
是执行。F
在创建后不可变。F
在第一次函数执行时自动加速,除非你设置AutoAccelerate来假
.如果希望在部署应用程序中加速该对象,则手动加速该对象。
输入参数
模型
- - - - - -SimBiology模型
SimBiology模型对象
SimBiology模型,指定为SimBiology模型对象
.
函数使用相同configset
的副本来设置Configset
对象的模型
对象。然而,该函数忽略以下内容configset
设置:StatesToLog
,OutputTimes
,StopTime
,SensitivityAnalysisOptions
因为这些设置是由函数的其他输入提供的。
参数个数
- - - - - -输入的SimFunctionF
特征向量|字符向量的单元格数组|{}
|SimBiology。场景
对象
输入的SimFunctionF
,指定为字符向量,字符向量的单元格数组,空单元格数组{}
,或SimBiology。场景
对象。字符向量表示定义输入的模型数量(种类、单元或参数)的名称F
.使用空单元格数组{}
或空场景
对象SimBiology.Scenarios.empty ()
创建一个SimFunction对象
它没有参数。
要明确地命名一个模型数量,请使用限定名,其中包括分隔的名称。要命名反应作用域参数,请使用反应名称限定参数。如果名称不是有效的MATLAB®变量名,用方括号括起来,例如反应[1]。参数[1]
.
给
- - - - - -剂量种类或剂量对象
特征向量|字符向量的单元格数组|剂量对象矢量|[]
剂量种类或剂量对象,指定为字符向量、字符向量的单元数组、剂量对象的向量或空数组[]
.
如果它是[]
,在模拟过程中没有物种被加药,除非你指定场景
对象,该对象的条目中定义了剂量。
如果它是一个字符向量的单元格数组,它必须是1 × -N数组,N是给药物种名称的数量。如果您计划使用,可以使用重复的物种名称多剂当你运行SimFunction的时候F
.仅使用剂量物种名称不包含剂量特性的信息。如果剂量对象包含参数化属性,如量
,使用剂量对象作为输入,而不仅仅是物种名称,以将此类参数信息传递给创建的SimFunctionF
.
如果它是剂量对象的矢量,它必须是1 × -N向量,N是剂量对象的数量。如果剂量对象具有非默认数值的属性,则忽略这些值并发出警告。只有TargetName
,DurationParameterName
,LagParameterName
,参数化属性用于创建SimFunction对象F
,即定义给
的属性F
.有关如何给
属性表已填充,请参见产权总结.
创建过程中指定的剂量信息SimFunction
对象必须与在对象执行期间指定的剂量信息一致。换句话说,元素的个数给
的属性SimFunction
F
必须等于输入剂量的总和场景
对象φ
和剂量输入参数u
当您执行对象时。
变体
- - - - - -替代模型值
不同的对象|变对象向量
备用模型值,指定为变量对象的变量或向量。时,这些值作为模型基线值应用SimFunction
创建对象。如果有多个变量引用同一个模型元素,则使用最后一个变量。
名称-值参数
指定可选参数对为Name1 = Value1,…,以=家
,在那里的名字
参数名称和价值
对应的值。名-值参数必须出现在其他参数之后,但对的顺序并不重要。
在R2021a之前,名称和值之间用逗号隔开,并括起来的名字
在报价。
例子:“UseParallel”,真的
指定执行SimFunctionF
并行执行。
UseParallel
- - - - - -标志来执行SimFunctionF
并行
假
(默认)|真正的
标志来执行SimFunctionF
在并行中,指定为逗号分隔的对,由“UseParallel”
而且真正的
或假
.如果真正的
以及并行计算工具箱™,即SimFunctionF
并行执行。
例子:“UseParallel”
,真正的
AutoAccelerate
- - - - - -标志在第一次评估时加速模型SimFunction
真正的
(默认)|假
标志对加速模型进行了第一次评估SimFunction
对象,指定为逗号分隔的对,由“AutoAccelerate”
而且真正的
或假
.
将该值设置为假
如果您有一个可以快速模拟的模型,因为模型的加速可能比模型的实际模拟时间要长。
例子:“AutoAccelerate”
,假
SensitivityOutputs
- - - - - -灵敏度输出因素
{}
(默认)|字符向量的单元格数组|“所有”
灵敏度输出因子,指定为逗号分隔对,由“SensitivityOutputs”
和一个字符向量的单元格数组。字符向量是模型数量(种类和参数)的名称,您希望为其计算灵敏度。默认值是{}
也就是说没有输出因子。输出因子是随时间变化的导数的分子SimBiology中的敏感性分析.
使用关键字“所有”
或“所有”
指定所有模型量作为灵敏度输出。然而,{'所有'}
表示命名的模型量所有
在模型中。(“所有”、“x”)
将敏感度输入因子或输出因子设置为已命名的物种所有
而且x
.
您必须同时指定两者“SensitivityOutputs”
而且“SensitivityInputs”
灵敏度计算的名称-值对参数。
例子:“SensitivityOutputs”
,“所有”
SensitivityInputs
- - - - - -输入因素的敏感性
{}
(默认)|字符向量的单元格数组|“所有”
灵敏度输入因子,指定为逗号分隔对,由“SensitivityInputs”
和一个字符向量的单元格数组。字符向量是模型数量(种类、分隔和参数)的名称,您希望针对它们计算灵敏度。默认值是{}
意思是没有输入因子。输入因子是中解释的时变导数的分母SimBiology中的敏感性分析.
使用关键字“所有”
或“所有”
指定所有模型量作为灵敏度输出。然而,{'所有'}
表示命名的模型量所有
在模型中。(“所有”、“x”)
将敏感度输入或输出设置为已命名的物种所有
而且x
.
您必须同时指定两者“SensitivityOutputs”
而且“SensitivityInputs”
灵敏度计算的名称-值对参数。
例子:“SensitivityInputs”
,{“Reaction1.c1”、“Reaction1.c2”}
SensitivityNormalization
- - - - - -计算灵敏度的归一化
“没有”
(默认)|的一半
|“全部”
计算灵敏度的归一化,指定为逗号分隔的对,由“SensitivityNormalization”
而且“没有”
,“一半”
,或“全部”
.
“没有”
-没有规范化(默认)“一半”
-只对分子归一化“全部”
——全dedimensionalization
有关详细信息,请参见归一化
.
例子:“SensitivityNormalization”
,“全部”
输出参数
F
——SimFunction
SimFunction
对象|SimFunctionSensitivity
对象
SimFunction,作为SimFunction对象
或SimFunctionSensitivity对象
.你可以执行F
比如函数句柄。
F
是一个SimFunctionSensitivity对象
如果指定非空“SensitivityOutputs”
而且“SensitivityInputs”
名称-值对参数。
例子
创建一个SimFunction对象
本例使用一阶反应的放射性衰变模型
,在那里x
而且z
物种和c
是正向速率常数。
加载包含放射性衰变模型的示例项目m1
.
sbioloadprojectradiodecay;
创建一个SimFunction对象
,指定参数Reaction1.c
被扫描的,还有物种x
作为函数在没有掺杂物质时的输出。
f = createSimFunction (m1,“Reaction1.c”,“x”[])
f = SimFunction参数:值类型单位名称 _______________ _____ _____________ ____________ {' Reaction1.c“0.5}{“参数”}{' 1 /二}可见:单位名称类型 _____ ___________ ____________ {' x '}{“物种”}{}“分子”前:没有TimeUnits:秒
如果UnitConversion
选项设置为假
当SimFunction
对象f
创建时,表中不显示模型数量的单位。
为了说明这一点,首先设置UnitConversion
选项假
.
c = 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对象
此示例创建一个SimFunction
对象,该对象具有剂量信息RepeatDose
或ScheduleDose
对象或这些对象的向量。但是,如果任何剂量对象包含诸如开始时间
,量
,率
,这些数据将被忽略,并发出警告。只有数据(如果可用的话)被使用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)
警告:DOSED中的一些剂量对象有数据。该数据将被忽略。在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
方法。
Lotka-Volterra模型的扫描参数
类的不同签名SimFunction对象
模拟和扫描Gillespie[1]描述的Lotka-Volterra(捕食者-猎物)模型的参数。
加载包含模型的示例项目m1
.
sbioloadproject洛特卡;
创建一个SimFunction对象f
与c1
而且c2
作为要扫描的输入参数,和日元
而且y2
作为函数在没有掺杂物质时的输出。
f = createSimFunction (m1, {“Reaction1.c1”,“Reaction2.c2”},{“日元”,“日元”},[])
f = SimFunction参数:值类型名称 ________________ _____ _____________ {' Reaction1。c1'} 10 {'parameter'}{'反动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));
您还可以为每个模拟指定不同的停止时间向量。
t_stop =(3、6);sbioplot (f(φ,t_stop));
接下来,将输出时间指定为一个向量。
t_output = 0:0.1:5;sbioplot (f(φ,[][],t_output));
将输出时间指定为向量的单元格数组。
T_output = {0:0.01:3, 0:0.2:6};Sbioplot (f(phi, [], [], t_output));
计算局部灵敏度SimFunctionSensitivity
对象
这个例子展示了如何在Lotka-Volterra模型中计算一些物种的局部敏感性SimFunctionSensitivity
对象。
加载示例项目。
sbioloadproject洛特卡;
定义输入参数。
params = {“Reaction1.c1”,“Reaction2.c2”};
定义观测到的物种,这是模拟的输出。
可见= {“日元”,“日元”};
创建一个SimFunctionSensitivity
对象。设置所有物种的灵敏度输出因子(日元
而且y2
)载于可见
参数和输入因子参数个数
参数(c1
而且c2
)通过将名称-值对参数设置为“所有”
.
f = createSimFunction (m1, params,可见,[],“SensitivityOutputs”,“所有”,“SensitivityInputs”,“所有”,“SensitivityNormalization”,“全部”)
f = SimFunction参数:值类型名称 ________________ _____ _____________ {' Reaction1。c1'} 10 {'parameter'}{'反动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 (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
).列表示输入因子(c1
而且c2
).
将停止时间设置为15,不指定输出次数。在这种情况下,输出时间默认是求解器时间点。
sd = f((10、0.1),15);
检索计算的灵敏度SimData
对象sd
.
[t、y、输出、输入]= getsensmatrix (sd);
绘制物种的敏感度图日元
而且y2
关于c1
.
图;情节(t y (:,: 1));传奇(输出);标题('物种y1和y2对参数c1的灵敏度');包含(“时间”);ylabel (“敏感”);
绘制物种的敏感度图日元
而且y2
关于c2
.
图;情节(t y (:,: 2));传奇(输出);标题('物种y1和y2对参数c2的灵敏度');包含(“时间”);ylabel (“敏感”);
或者,您也可以使用sbioplot
.
sbioplot (sd);
的计算灵敏度的时间积分也可以绘制灵敏度矩阵日元
而且y2
.情节表明日元
而且y2
更敏感c1
比c2
.
[~, in, out] = size(y);结果= 0 (in, out);为i = 1:为j = 1:结果(i, j) = trapz (t (:), abs (y (:, i, j)));结束结束图;百巴=酒吧(结果);hax =百巴(1).Parent;hax。XTick = 1:长度(输出);hax。XTickLabel =输出;传奇(输入,“位置”,“NorthEastOutside”);ylabel (“敏感”);
不同初始条件下葡萄糖-胰岛素反应的模拟模型
这个例子展示了如何模拟正常和糖尿病受试者的葡萄糖-胰岛素反应。
加载葡萄糖-胰岛素反应模型。关于模型的详细信息,请参见背景部分模拟葡萄糖-胰岛素反应.
sbioloadproject (“insulindemo”,“m1”)
模型包含存储在不同变量中的不同初始条件。
变量= getvariant (m1);
获取2型糖尿病患者的初始条件。
类型2 =变体(1)
type2 = SimBiology变体- 2型糖尿病(非活动)ContentIndex:类型:名称:属性:值:1参数血浆容量…1.49 2 parameter k1 0.042 3 parameter k2 0.071 4 parameter血浆体积…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参数Vmx值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 parameter basic Plasma I…价值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));
模拟糖尿病患者24小时的葡萄糖-胰岛素反应。
sbioplot (diabSim([], 24岁,mealTable));
使用变体执行扫描
假设您想使用包含不同胰岛素损伤的不同初始条件的变量数组执行参数扫描。例如,模型m1
有对应于低胰岛素敏感性和高胰岛素敏感性的变异。您可以通过对SimFunction对象的单个调用来模拟这两种情况下的模型。
选择要扫描的变量。
varToScan = sbioselect (m1,“名字”,...{“低胰岛素敏感性”,“高胰岛素敏感性”});
检查每个变量中存储了哪些模型参数。
varToScan (1)
ans = simbio变体-低胰岛素敏感性(非活动)ContentIndex:类型:名称:属性:值:1参数Vmx值0.0235 2参数kp3值0.0045
varToScan (2)
ans = simbio变体-高胰岛素敏感性(非活动)ContentIndex:类型:名称:属性:值:1参数Vmx值0.094 2参数kp3值0.018
的两个变量都存储替换值Vmx
而且kp3
参数。在创建SimFunction对象时,需要将它们指定为输入参数。
创建一个SimFunction对象来扫描变量。
variantScan = createSimFunction (m1, {“Vmx”,“kp3”},...{“(等离子Glu浓缩)”,“(血浆Ins浓缩的)”},“剂量”);
模拟模型并绘制结果图。运行1
包括低胰岛素敏感性的模拟结果和运行2
对于高胰岛素敏感性。
sbioplot (variantScan(24岁的varToScan mealTable));
低胰岛素敏感性导致血糖浓度升高和延长。
恢复设置的警告。
警告(warnSettings);
参考文献
吉莱斯皮,D.T.(1977)。耦合化学反应的精确随机模拟。物理化学学报,32(2),339 - 339。
扩展功能
自动并行支持
通过使用并行计算工具箱™自动并行运行计算来加速代码。
平行运行,集合“UseParallel”
来真正的
.
有关更多信息,请参见“UseParallel”
名称-值对的论点。
版本历史
介绍了R2014a
MATLAB命令
你点击了一个对应于这个MATLAB命令的链接:
在MATLAB命令窗口中输入命令来运行该命令。Web浏览器不支持MATLAB命令。
您也可以从以下列表中选择网站:
如何获得最佳的网站性能
选择中国网站(中文或英文)以获得最佳的网站表现。其他MathWorks国家网站没有针对从您的位置访问进行优化。