SystemModelSimulateSensitivity[model,{p1,p2,…}]
仿真 model 及其在实验条件设置下对参数 pi 的敏感度.
SystemModelSimulateSensitivity[model,tmax,{p1,p2,…}]
从 0 到 tmax 进行仿真.
SystemModelSimulateSensitivity[model,{tmin,tmax},{p1,p2,…}]
从 tmin 到 tmax 进行仿真.
SystemModelSimulateSensitivity[model,vars,{tmin,tmax},{p1,p2,…}]
只保存变量 vars 的仿真数据.
SystemModelSimulateSensitivity
SystemModelSimulateSensitivity[model,{p1,p2,…}]
仿真 model 及其在实验条件设置下对参数 pi 的敏感度.
SystemModelSimulateSensitivity[model,tmax,{p1,p2,…}]
从 0 到 tmax 进行仿真.
SystemModelSimulateSensitivity[model,{tmin,tmax},{p1,p2,…}]
从 tmin 到 tmax 进行仿真.
SystemModelSimulateSensitivity[model,vars,{tmin,tmax},{p1,p2,…}]
只保存变量 vars 的仿真数据.
更多信息和选项
- 在对系统模型中的参数值进行修改时,可用 SystemModelSimulateSensitivity 来估计仿真结果的变化.
- model 可采用以下形式:
-
SystemModel[…] 通用系统模型 StateSpaceModel[…] 状态空间模型 TransferFunctionModel[…] 传递函数模型 AffineStateSpaceModel[…] 仿射状态空间模型 NonlinearStateSpaceModel[…] 非线性状态空间模型l DiscreteInputOutputModel[…] 离散输入-输出模型l - SystemModelSimulateSensitivity 返回一个 SystemModelSimulationData 对象.
- SystemModelSimulateSensitivity 为所有实值变量
生成解
以及导数
、
、…,其中
. - 可通过 sd["SensitivityNames"] 在 SystemModelSimulationData 对象 sd 中列出敏感度.
- 保存的仿真变量 vars 可以取下列值:
-
Automatic 自动选择要保存的变量 {v1,v2,…} 只保存变量 vi All 保存所有变量 - SystemModelSimulateSensitivity[…,spec] 用 Association spec 来指定初值、参数和输入:
-
"ParameterValues" {p1val1,…} 参数 pi 取值 vali "InitialValues" {v1val1,…} 变量 vi 取初值 vali "Inputs" {in1fun1,…} 输入 ini 在时间点 t 取值 funi[t] - 将 "ParameterValues" 或 "InitialValues" 设为 {pi{c1,c2,…},…} 以并行方式运行仿真,pi 取值 cj.
- "InitialValues" 对应于 Modelica 模型中的 start 属性.
- 可以给出以下选项:
-
InterpolationOrder Automatic 事件之间的输出的连续性程度 Method Automatic 使用何种仿真方法 ProgressReporting $ProgressReporting 控制进度显示 - 选项设置 Automatic 通常表示设置是从 model 中获取的或为实验设置.
- 设为 Method{"Sensitivity""WSM"} 时,对于 SystemModel model,会使用 CVODES 求解器计算状态变量的灵敏度.
- 其他 Method 仿真子选项如 SystemModelSimulate 中所示.
范例
打开所有单元 关闭所有单元基本范例 (3)
sim = SystemModelSimulateSensitivity[[image], {"a"}]sim["SensitivityNames"]SystemModelPlot[sim, {{"y", "a"}, {"z", "a"}}]sim = SystemModelSimulateSensitivity[[image], {"y", "z"}, 5, {"a"}]在 a 改变 10% 的情况下绘制 y 和 z 的变化范围:
SystemModelPlot[sim, {{"y", "a", 0.1}, {"z", "a", 0.1}}]SystemModel["IntroductoryExamples.ComponentBased.ElectricCircuit"]sim = SystemModelSimulateSensitivity[[image], {"capacitor1.v"}, 5, {"sineVoltage1.f"}]范围 (17)
模型 (3)
仿真 NonlinearStateSpaceModel 时对变量和敏感度进行计算:
sim = SystemModelSimulateSensitivity[NonlinearStateSpaceModel[{{Cos[x] + 4*a*Sin[x/2]},
{x + Sin[x]}}, {x}, {}, {Automatic}, Automatic,
SamplingPeriod -> None], 10, {a}, <|"ParameterValues" -> {a -> 1}|>]sim["SensitivityNames"]SystemModelPlot[sim, {{x, a}, {Subscript[, 1], a}}, PlotRange -> All]SystemModelPlot[sim, {{x, a, 0.4}}, PlotRange -> All]计算 AffineStateSpaceModel 参数扫描的敏感度:
sims = SystemModelSimulateSensitivity[AffineStateSpaceModel[{{Cos[x2], (-1 - a)*x2 +
Cos[x1^2]}, {{0}, {1}}, {x2}, {{0}}},
{x1, x2}, Automatic, {Automatic}, Automatic, SamplingPeriod -> None], 5, {a}, <|"ParameterValues" -> {a -> {1, 10}}|>]SystemModelPlot[sims, {{x2, a, 0.5}}]计算 DiscreteInputOutputModel 的敏感度:
diom = DiscreteInputOutputModel[{u[0] + y[-1] + a y[-2], u[1] + u[0] + u[-1]}, {{u, {-2, -1, 1}}}, {{y, {-1, -1, -1}}}]sim = SystemModelSimulateSensitivity[diom, {a}, <|"Inputs" -> {1 -> Range[-20, 20]}, "ParameterValues" -> {a -> 1}|>]SystemModelPlot[sim, {{y, a, 0.05}}]仿真时间 (3)
sim = SystemModelSimulateSensitivity[[image], {"a"}]sim["SimulationInterval"]sim = SystemModelSimulateSensitivity[[image], 5, {"a"}]sim["SimulationInterval"]sim = SystemModelSimulateSensitivity[[image], {2, 10}, {"a"}]sim["SimulationInterval"]敏感度结果 (6)
sim = SystemModelSimulateSensitivity[[image], 50, {"a"}]sim["SensitivityNames"]SystemModelPlot[sim, {{"y", "a"}}]sim = SystemModelSimulateSensitivity[[image], 5, {"a"}];sim["SensitivityNames"]{ySensA} = sim[{{"y", "a"}}]sim = SystemModelSimulateSensitivity[[image], 5, {"sineVoltage1.f"}];sim["SensitivityNames"]//ShortSystemModelPlot[sim, {{"capacitor1.v", "sineVoltage1.f"}}]sim = SystemModelSimulateSensitivity[[image], 50, {"a"}]sim["SensitivityNames"]{ySensA, y} = sim[{{"y", "a"}, "y"}, t]绘制 a 未改变时 y 的曲线,以及参数 a 增加 0.05 倍时的曲线:
Plot[{Tooltip[y, "Nominal"], Tooltip[y + 0.05 ySensA, "Perturbed"]}, {t, 0, 50}]sim = SystemModelSimulateSensitivity[[image], 5, {"a"}];sim["SensitivityNames"]{ySensA, zSensA, y, z, a0} = sim[{{"y", "a"}, {"z", "a"}, "y", "z", "a"}, t];绘制当 a 改变 10% 的敏感度时 y 和 z 的变化范围:
{dY, dZ} = {a0 0.1ySensA, a0 0.1zSensA};Plot[{Tooltip[y, "y"], y + dY, y - dY, Tooltip[z, "z"], z + dZ, z - dZ}, {t, 0, 5}, Filling -> {2 -> {3}, 5 -> {6}}]sim = SystemModelSimulateSensitivity[[image], 50, {"a"}]{ySensA, y} = sim[{{"y", "a"}, "y"}, t];dY = 0.1 ySensA;Plot[{Tooltip[y, "y"], y + dY, y - dY}, {t, 0, 50}, Filling -> {2 -> {3}}]变量、参数和输入 (3)
Subscript[sim, 1] = SystemModelSimulateSensitivity[[image], 50, {"a"}];Subscript[sim, 2] = SystemModelSimulateSensitivity[[image], 50, {"a"}, <|"InitialValues" -> {"y" -> 2.85}|>];SystemModelPlot[{Subscript[sim, 1], Subscript[sim, 2]}, {{"y", "a"}}]Subscript[sim, 1] = SystemModelSimulateSensitivity[[image], 50, {"a"}];Subscript[sim, 2] = SystemModelSimulateSensitivity[[image], 50, {"a"}, <|"ParameterValues" -> {"a" -> 2.95}|>];SystemModelPlot[{Subscript[sim, 1], Subscript[sim, 2]}, {{"y", "a"}}]sim = SystemModelSimulateSensitivity[[image], 10, {"gain.k"}, <|"Inputs" -> {"u" -> Sin}|>]SystemModelPlot[sim, {{"integrator.y", "gain.k", 0.1}}]存储结果 (2)
sim = SystemModelSimulateSensitivity[[image], {"y", "a"}, {"a"}]{sim["VariableNames"], sim["ParameterNames"]}sim = SystemModelSimulateSensitivity[[image], {"TR", "lambda"}, {0, 50}, {"lambda"}]SystemModelPlot[sim, {{"TR", "lambda", 0.2}}]推广和延伸 (1)
Hold["WSMDebug"] /. $MessageGroupsOn[SystemModelSimulateSensitivity::dinit]SystemModelSimulateSensitivity["DocumentationExamples.Basic.OneParameter", {0, 1}, {"a"}, Method -> {"Sensitivity" -> "WSM"}]Off["WSMDebug"]选项 (4)
InterpolationOrder (1)
{Subscript[sim, 1], Subscript[sim, 2]} = Table[SystemModelSimulateSensitivity[[image], 7, {"a"}, Method -> {Automatic, "InterpolationPoints" -> 3}, InterpolationOrder -> intOrder], {intOrder, {1, 3}}];SystemModelPlot[{Subscript[sim, 1], Subscript[sim, 2]}, {{"y", "a"}}]Method (2)
采用 Method{"Sensitivity""WSM"} 时,对于SystemModel,会使用 CVODES 求解器计算状态变量的灵敏度:
simWSM = SystemModelSimulateSensitivity[[image], 5, {"a"}, Method -> {"Sensitivity" -> "WSM"}]simWSM["SensitivityNames"]sim = SystemModelSimulateSensitivity[[image], 5, {"a"}]sim["SensitivityNames"]仿真一个 SystemModel,使用模型设置的插值点数量计算灵敏度:
sim = SystemModelSimulateSensitivity[[image], 5, {"a"}];
SystemModelPlot[sim, {{"y", "a"}, {"z", "a"}, {Derivative[1]["z"], "a"}}]sim = SystemModelSimulateSensitivity[[image], 5, {"a"}, Method -> {"InterpolationPoints" -> 5}];
SystemModelPlot[sim, {{"y", "a"}, {"z", "a"}, {Derivative[1]["z"], "a"}}]simWSM = SystemModelSimulateSensitivity[[image], 5, {"a"}, Method -> {"Sensitivity" -> "WSM", "InterpolationPoints" -> 5}];
SystemModelPlot[simWSM, {{"y", "a"}, {"z", "a"}}]ProgressReporting (1)
用 ProgressReporting 控制进度报告:
SystemModelSimulateSensitivity[[image], {"a"}, ProgressReporting -> False]应用 (5)
sim = SystemModelSimulateSensitivity[[image], {"y"}, 40, {"a"}];{y, ysensa} = sim[{"y", {"y", "a"}}, t];a0 = First[sim[{"a"}]]{peakVal, {peakTime}} = NMaximize[{0.05 a0 ysensa, 0 < t < 40}, {t}]Plot[Evaluate[{y, y + 0.05 a0 ysensa, y - 0.05 a0 ysensa}], {t, 0, 40}, Filling -> {2 -> {3}}, GridLines -> {{peakTime[[2]]}, None}]sim = SystemModelSimulateSensitivity[[image], {"integrator1.y", "integrator2.y", "integrator3.y"}, 1, {"sine.f"}];10% 敏感度范围显示 "integrator3.y" 对频率参数最敏感:
SystemModelPlot[sim, Table[{v, "sine.f", 0.1}, {v, {"integrator1.y", "integrator2.y", "integrator3.y"}}]]sim = SystemModelSimulateSensitivity[[image], {"wheel1.x", "wheel1.y"}, 10, {"wheel1.radius", "wheel1.m"}]{x, y, xsensrad, ysensrad, xsensmass, ysensmass} = sim[{"wheel1.x", "wheel1.y", {"wheel1.x", "wheel1.radius"}, {"wheel1.y", "wheel1.radius"}, {"wheel1.x", "wheel1.m"}, {"wheel1.y", "wheel1.m"}}, t];{r0, m0} = sim[{"wheel1.radius", "wheel1.m"}]d = 0.04;
ParametricPlot[{{x, y}, {x + v d #[[1]], y + v d #[[2]]}}, {v, -1, 1}, {t, 0, 10}, PlotPoints -> 40, Mesh -> None, Axes -> None, PlotLabel -> #[[3]], FrameTicks -> {{Automatic, None}, {None, None}}]& /@ {{xsensrad r0, ysensrad r0, "Wheel radius"}, {xsensmass m0, ysensmass m0, "Wheel mass"}}model = \!\(\*GraphicsBox[«8»]\);data = Import["ExampleData/inertiaTestData.dat"];{p1, p2, var} = {"Resistor1.R", "SpringDamper1.d", "Inertia2.w"};用 SystemModelSimulateSensitivity 获取梯度:
g[p_ ? NumericQ, q_ ? NumericQ] := g[p, q] = Quiet[AssociationThread[{var, {var, p1}, {var, p2}}, SystemModelSimulateSensitivity[model, {var}, 40, {p1, p2}, <|"ParameterValues" -> {p1 -> p, p2 -> q}|>, ProgressReporting -> False][{var, {var, p1}, {var, p2}}]], {SystemModelSimulateSensitivity::gen}]Plot[g[0.1, 0.25][var][t], {t, 0, 40}]AbsoluteTiming[FindFit[data, g[p, q][var][t], {{p, 0.1}, {q, 0.25}}, t, Gradient -> "FiniteDifference"]]AbsoluteTiming[pars = FindFit[data, g[p, q][var][t], {{p, 0.1}, {q, 0.25}}, t, Gradient :> Comap[Lookup[g[p, q], {{var, p1}, {var, p2}}], t]]]sim = SystemModelSimulate[model, {0, 40}, <|"ParameterValues" -> ({p1 -> p, p2 -> q} /. pars)|>];Show[SystemModelPlot[sim, {var}, PlotStyle -> Orange], ListPlot[data]]sim = SystemModelSimulateSensitivity[[image], 30, {"a"}]sim["SensitivityNames"]{y, ysensa} = sim[{"y", {"y", "a"} }, t];a0 = First[sim[{"a"}]]dY = 0.05 * a0 ysensa;Plot[Evaluate[{y, y + dY, y - dY}], {t, 0, 30}, Filling -> {2 -> {3}}]simv = SystemModelSimulate[[image], 30, <|"ParameterValues" -> {"a" -> a0 Range[0.95, 1.05, 0.02]}|>];yV = Table[sd[{"y"}, t][[1]], {sd, simv}];Plot[Evaluate[{y, y + dY, y - dY, yV}], {t, 0, 30}, Filling -> {2 -> {3}}]属性和关系 (4)
sim = SystemModelSimulateSensitivity[[image], 50, {"a"}];SystemModelPlot[sim, {"y", {"y", "a"}}]y = DSolve[{f'[t] + Sin[a]f[t] == 0, f[0] == b}, f[t], t][[1, 1, 2]];ySensA = D[y, a]Plot[Evaluate[{y, ySensA} /. {a -> 3, b -> 1}], {t, 0, 50}, PlotRange -> All]sim = SystemModelSimulateSensitivity[[image], 5, {"a"}];{ySensA, y, a0} = sim[{{"y", "a"}, "y", "a"}, t];dY = a0 0.1ySensA;Plot[{Tooltip[y, "y"], y + dY, y - dY}, {t, 0, 5}, Filling -> {2 -> {3}}, AxesLabel -> {"t", None}]使用 SystemModelPlot:
SystemModelPlot[sim, {{"y", "a", 0.1}}]{par, var} = {"sineVoltage1.f", "capacitor1.v"};sim = SystemModelSimulateSensitivity[[image], {var}, 5, {par}];{p0} = sim[{par}];sim2 = SystemModelSimulate[[image], {var}, 5, <|"ParameterValues" -> {par -> {0.9p0, 1.1p0}}|>];在图中进行比较,10% 的变化给出的轨迹位于计算所得界限范围之外:
Show[SystemModelPlot[sim, {{var, par, 0.1}}, {2.5, 3.5}], SystemModelPlot[sim2, {var}]]将 SystemModelParametricSimulate 应用于一个可对不同的值进行计算的函数:
sols = SystemModelParametricSimulate[[image], "capacitor1.v", {"sineVoltage1.f"}]fns = Table[sols[hz], {hz, 1, 5}]Table[Plot[fn[t], {t, 0, 10}], {fn, fns}]巧妙范例 (1)
显示 Rabinovich–Fabrikant 方程中
和
轴的敏感度范围:
sim = SystemModelSimulateSensitivity[[image], {"x", "y", "z"}, 100, {"a", "g"}, <|"ParameterValues" -> {"a" -> 0.01, "g" -> 0.05}|>];{x, y, z, dx, dy, dz} = sim[{"x", "y", "z", {"x", "a"}, {"y", "a"}, {"z", "a"}}, t];d = 0.04;
ParametricPlot[{x + v d dx, y + v d dy}, {v, 0, 1}, {t, 0, 19}, PlotPoints -> 40, Axes -> None, ColorFunction -> ColorData["HypsometricTints"], Mesh -> False]Graphics3D[Tube@@Transpose@Table[{{x, y, z}, 0.0005Norm[{dx, dy, dz}]}, {t, 10, 55, 0.05}], Axes -> True]相关链接
文本
Wolfram Research (2018),SystemModelSimulateSensitivity,Wolfram 语言函数,https://reference.wolfram.com/language/ref/SystemModelSimulateSensitivity.html.
CMS
Wolfram 语言. 2018. "SystemModelSimulateSensitivity." Wolfram 语言与系统参考资料中心. Wolfram Research. https://reference.wolfram.com/language/ref/SystemModelSimulateSensitivity.html.
APA
Wolfram 语言. (2018). SystemModelSimulateSensitivity. Wolfram 语言与系统参考资料中心. 追溯自 https://reference.wolfram.com/language/ref/SystemModelSimulateSensitivity.html 年
BibTeX
@misc{reference.wolfram_2026_systemmodelsimulatesensitivity, author="Wolfram Research", title="{SystemModelSimulateSensitivity}", year="2018", howpublished="\url{https://reference.wolfram.com/language/ref/SystemModelSimulateSensitivity.html}", note=[Accessed: 07-November-2026]}
BibLaTeX
@online{reference.wolfram_2026_systemmodelsimulatesensitivity, organization={Wolfram Research}, title={SystemModelSimulateSensitivity}, year={2018}, url={https://reference.wolfram.com/language/ref/SystemModelSimulateSensitivity.html}, note=[Accessed: 07-November-2026]}