SystemModelSimulate[model]
根据实验设置仿真 model.
SystemModelSimulate[model,tmax]
从 0 到 tmax 进行仿真.
SystemModelSimulate[model,{tmin,tmax}]
从 tmin 到 tmax 进行仿真.
SystemModelSimulate[model,vars,{tmin,tmax}]
只保存变量 vars 的仿真数据.
SystemModelSimulate
SystemModelSimulate[model]
根据实验设置仿真 model.
SystemModelSimulate[model,tmax]
从 0 到 tmax 进行仿真.
SystemModelSimulate[model,{tmin,tmax}]
从 tmin 到 tmax 进行仿真.
SystemModelSimulate[model,vars,{tmin,tmax}]
只保存变量 vars 的仿真数据.
更多信息和选项
- model 可采用以下形式:
-
SystemModel[…] 一般系统模型 StateSpaceModel[…] 状态-空间模型 TransferFunctionModel[…] 传递函数模型 AffineStateSpaceModel[…] 仿射状态-空间模型 NonlinearStateSpaceModel[…] 非线性状态-空间模型 DiscreteInputOutputModel[…] 离散输入-输出模型 SystemModelSurrogate[…] 替代模型 - SystemModelSimulate 返回一个 SystemModelSimulationData 对象.
- 保存的仿真变量 vars 可以取下列值:
-
Automatic 自动选择要保存的变量 {v1,v2,…} 只保存变量 vi All 保存所有变量 - SystemModelSimulate[…,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 控制进度显示 - 当 model 为 SystemModel 时,支持选项 Method.
- Method 设置可采用 Method->"method" 或 Method{"method","sub1"->val1,…} 这样的形式.
- 可以使用以下自适应步长方法:
-
"DASSL" DASSL DAE 求解器 "CVODES" CVODES ODE 求解器 - 自适应步长方法的子选项包括:
-
"InterpolationPoints" Automatic 插值点的数目 "Tolerance" 10-6 自适应步长的容差 - 可以使用以下固定步长方法:
-
"Euler" 明确的 1 阶欧拉方法 "Heun" 2 阶 Heun 方法 "RungeKutta" 明确的 1 阶 Runge–Kutta 方法 - 固定步长方法的子选项包括:
-
"StepSize" 10-3 固定步长大小 - 当设置为 Method->{"NDSolve",sub1->val1,…} 时,用 NDSolve 作为求解器. 方法选项 subi 被传递给 NDSolve.
范例
打开所有单元 关闭所有单元基本范例 (3)
sim = SystemModelSimulate[[image]]SystemModelPlot[sim, {"y", "z"}]sim = SystemModelSimulate[[image], 1, <|"ParameterValues" -> {"sineVoltage1.offset" -> Range[5]}|>];SystemModelPlot[sim, {"sineVoltage1.v"}]SystemModel["DocumentationExamples.Simulation.WeakAxis"]SystemModelSimulate[\!\(\*GraphicsBox[«8»]\)]SystemModelSimulate["DocumentationExamples.Simulation.WeakAxis"]范围 (24)
模型 (6)
model = RandomChoice[SystemModelExamples["Models", "Modelica.Thermal.FluidHeatFlow.*"]]SystemModelSimulate[model]仿真 NonlinearStateSpaceModel 并绘制仿真结果:
sim = SystemModelSimulate[NonlinearStateSpaceModel[{{Cos[x] + 4*Sin[x/2]},
{x + Sin[x]}}, {x}, {}, {Automatic}, Automatic,
SamplingPeriod -> None]]SystemModelPlot[sim, All]用 UnitStep 作为输入,仿真 TransferFunctionModel:
sim = SystemModelSimulate[TransferFunctionModel[{{{2*(1 - s)}}, 2*(1 + s/2 + s^2)},
s], <|"Inputs" -> {1 -> UnitStep}|>]SystemModelPlot[sim, All, PlotRange -> All]对 AffineStateSpaceModel 进行参数扫描:
sims = SystemModelSimulate[AffineStateSpaceModel[{{Cos[x2], (-a)*x2 +
Cos[x1^2]}, {{0}, {1}}, {x2}, {{0}}},
{x1, x2}, Automatic, {Automatic}, Automatic, SamplingPeriod -> None], <|"ParameterValues" -> {a -> {0.1, 0.2}}|>]SystemModelPlot[sims, {x2}]diom = DiscreteInputOutputModel[{u[0] + y[-1] + y[-2], u[1] + u[0] + u[-1]}, {{u, {-2, -1, 1}}}, {{y, {-1, -1, -1}}}]sim = SystemModelSimulate[diom, <|"Inputs" -> {1 -> Range[-20, 20]}|>]SystemModelPlot[sim, All]仿真一个 SystemModelSurrogate:
surrogate = SystemModelSurrogateTrain[\!\(\*GraphicsBox[«8»]\), <|"Outputs" -> "Inertia2.w", "ParameterValues" -> {"Resistor1.R" -> CenteredInterval[0.5, 0.1]}|>]sim = SystemModelSimulate[surrogate, <|"ParameterValues" -> {"Resistor1.R" -> 0.45}|>]SystemModelPlot[sim, "Inertia2.w"]仿真时间 (4)
sim = SystemModelSimulate[[image]]sim["SimulationInterval"]sim = SystemModelSimulate[[image], 5]sim["SimulationInterval"]sim = SystemModelSimulate[[image], {2, 10}]sim["SimulationInterval"]用 Quantity 指定时间间隔:
sim = SystemModelSimulate[[image], {0, Quantity[2500, "Microseconds"]}]sim["SimulationInterval"]变量、参数和输入 (8)
sim = SystemModelSimulate[[image], <|"InitialValues" -> {"y" -> 5}|>]sim[{"y"}, 0]sim = SystemModelSimulate[[image], <|"ParameterValues" -> {"a" -> 5}|>]sim[{"a"}]sim = SystemModelSimulate[[image], {0, 10}, <|"Inputs" -> {"u1" -> Sin, "u2" -> Cos}|>];SystemModelPlot[sim, {"u1", "u2", "y"}]sim = SystemModelSimulate[[image], <|"InitialValues" -> {"x" -> Range[5]}|>];SystemModelPlot[sim, {"x"}]sim1 = SystemModelSimulate[[image], 1];sim2 = SystemModelSimulate[[image], 1, <|"ParameterValues" -> {"sineVoltage1.offset" -> 5}|>];SystemModelPlot[{sim1, sim2}, {"capacitor1.v"'}]sim = SystemModelSimulate[[image], 1, <|"ParameterValues" -> {"sineVoltage1.offset" -> Range[5]}|>];SystemModelPlot[sim, {"sineVoltage1.v"}]sims = SystemModelSimulate[[image], 1, <|"ParameterValues" -> {"a" -> {1, 2}, "f" -> {3, 4}}|>];Map[SystemModelPlot[#, {"y"}, PlotLabel -> {"a", "f"} -> #[{"a", "f"}]]&, sims]将 TimeSeries 作为输入,对模型进行仿真:
ts = TimeSeries[{2, 2, 1, 6, 5, 7, 4, 4}, {{0, 1, 2, 5, 7, 7.5, 9, 10}}];sim = SystemModelSimulate[[image], 10, <|"Inputs" -> {"u" -> ts}|>];SystemModelPlot[sim, {"u", "y"}]仿真结果 (6)
sim = SystemModelSimulate[[image]];SystemModelPlot[sim, {"x1", "x2"}]sim = SystemModelSimulate[[image], 10];{xvar, xvarprime} = sim[{"x", "x"'}, t]用 Plot 函数绘制变量:
Plot[{xvar, xvarprime}, {t, 0, 10}]sim = SystemModelSimulate[[image]];angle1v = sim[{"angle1v"}]//First;NMaximize[angle1v[t], t]SystemModelPlot[[image], {"x1", "x4"}]指定 SystemModelSimulate 的参数:
SystemModelPlot[[image], {"x1", "x4"}, 5]sim = SystemModelSimulate[[image], {"x1", "x2", "x3"}]sim["VariableNames"]sim = SystemModelSimulate[[image], {"x1", "x2", "x3"}, {2, 5}]SystemModelPlot[sim, sim["VariableNames"]]推广和延伸 (1)
选项 (10)
InterpolationOrder (1)
Method (8)
sim = SystemModelSimulate[[image], 20, Method -> {"Heun", "StepSize" -> 0.1}]SystemModelPlot[sim, {"capacitor1.p.v"}]sim = SystemModelSimulate[[image], 1220, Method -> {"DASSL", "InterpolationPoints" -> 3000}]在 ParametricPlot 图中显示结果:
ParametricPlot[Evaluate[sim[{"x", "y"}, t]], {t, 0, 1220}, ColorFunction -> (ColorData[{"SunsetColors", "Reverse"}][#3]&), PlotPoints -> 400]{adaptive, fixed} = SystemModelSimulate[[image], 3, <|"ParameterValues" -> {"lambda" -> 45}|>, Method -> #]& /@ {{"DASSL"}, {"Euler", "StepSize" -> 0.01}};Plot[Evaluate[#[[1]][{"x", "y"}, t]], {t, 1.6, 1.8}, PlotRange -> {-10, 5}, PlotLabel -> #[[2]]]& /@ {{adaptive, "Adaptive step"}, {fixed, "Fixed step"}}sim1 = SystemModelSimulate[[image], 5, Method -> {"DASSL", "InterpolationPoints" -> 3}];SystemModelPlot[sim1, {"x"}]sim2 = SystemModelSimulate[[image], 5, Method -> {"DASSL", "InterpolationPoints" -> 100}];SystemModelPlot[sim2, {"x"}]AbsoluteTiming[sim1 = SystemModelSimulate[[image], 50, Method -> "Heun"]]AbsoluteTiming[sim2 = SystemModelSimulate[[image], 50, Method -> {"Heun", "StepSize" -> 0.01}]]SystemModelPlot[{sim1, sim2}, {"x"}]SystemModelSimulate[[image], {0, 2}, Method -> {"CVODES", "InterpolationPoints" -> "AllSolverSteps"}]用 NDSolve 仿真模型:
sim = SystemModelSimulate[[image], 2, Method -> "NDSolve"]结果为含有仿真结果的 SystemModelSimulationData 对象:
sim[{"x", "x"'}]将选项传递给 NDSolve:
sim = SystemModelSimulate[[image], 4, Method -> {"NDSolve", MaxStepSize -> 3, StartingStepSize -> 3, AccuracyGoal -> 0.001, PrecisionGoal -> 0.001}]SystemModelPlot[sim, {"x", "x"'}]ProgressReporting (1)
用 ProgressReporting 控制进度报告:
SystemModelSimulate[[image], ProgressReporting -> False]应用 (11)
sim = SystemModelSimulate[[image], 150]height = sim[{"tank.h"}][[1]];max = FindMaximum[{height[t], 0 < t < 150}, {t, 20}][[1]]step = sim[{"tank.qIn"}, 0][[1]];overshoot = (max - step) / stepPlot[Evaluate@height[t], {t, 0, 150}, GridLines -> {{}, {height[150]}}, PlotRange -> All, Mesh -> {{height[150]}}, MeshShading -> {Automatic, Red}, MeshFunctions -> {#2&}]sim = SystemModelSimulate[[image], 150];height = sim[{"tank.h"}][[1]];通过查看高度的稳态值获取上升到 10% 和 90% 时的值:
{p10, p90} = height[150]{0.1, 0.9}{t10, t90} = FindMinimum[{t, height[t] > # && t > 0}, t][[1]]& /@ {p10, p90}t90 - t10绘制终值曲线,并标出信号达到终值的 10% 和 90% 的时间:
Plot[Evaluate@height[t], {t, 0, 100}, GridLines -> {{t10, t90}, {height[150]}}, PlotRange -> All, Mesh -> {{t10, t90}}, MeshShading -> {Automatic, Red, Automatic}]sim = SystemModelSimulate[[image], {0, 150}];height = sim[{"tank.h"}][[1]];{p95, p105} = height[150]{0.95, 1.05}ts = Max[First@FindMaximum[{t, height[t] > p105 && 0 ≤ t ≤ 150}, {t, Cases[Range[0, 150, 5], t_ /; height[t] > p105][[-1]]}],
First@FindMaximum[{t, height[t] < p95 && 0 ≤ t ≤ 150}, {t, Cases[Range[0, 150, 5], t_ /; height[t] < p95][[-1]]}]]Plot[Evaluate@height[t], {t, 0, 150}, GridLines -> {{ts}, {p95, p105}}, PlotRange -> All, Mesh -> {{ts}}, MeshShading -> {Automatic, Red}]simf[v_] := simf[v] = SystemModelSimulate[[image], 5, <|"ParameterValues" -> {"conduction.G" -> v}|>][{"Tsensor1.T", "Tsensor2.T"}, t];Manipulate[
Plot[Evaluate[simf[v]], {t, 0, 5}, PlotRange -> {0, 100}], {v, 6, 10}, SaveDefinitions -> True, SynchronousUpdating -> False]sims = SystemModelSimulate[[image], 5, <|"ParameterValues" -> {"wheel1.I_axis" -> Range[0.05, 0.08, 0.004]}|>];vars = #[{"wheel1.x", "wheel1.y"}, t]& /@ sims;ParametricPlot[Evaluate@vars, {t, 0, 5}, Frame -> True, Axes -> False]sims = SystemModelSimulate[\!\(\*GraphicsBox[«8»]\), 200, <|"Inputs" -> {"u" -> Function[t, UnitStep[t] - UnitStep[t - 2]]}, "ParameterValues" -> {"spring1.c" -> Range[0.1, 1.5, 0.4]}|>];idata = Table[Abs@Fourier@Table[UnitStep[t] - UnitStep[t - 2], {t, 0, 200, 0.25}], {sim, sims}];
odata = Table[Abs@Fourier@Table[Evaluate[sim[{"inertia3.w"}, t][[1]]], {t, 0, 200, 0.25}], {sim, sims}];ListLogLinearPlot[odata[[All, 1 ;; 200]] / idata[[All, 1 ;; 200]], Joined -> True, DataRange -> {0, 2Pi}, PlotRange -> {{0.1, 5}, {0, 50}}]data = Import["ExampleData/inertiaTestData.dat"];model = \!\(\*GraphicsBox[«8»]\);criteriaFun[pv : {Verbatim[Rule][_ ? StringQ, _ ? NumericQ]..}, var_ ? StringQ] :=
Module[{f, tmax = 40},
f = SystemModelSimulate[model, tmax, <|"ParameterValues" -> pv|>][{var}][[1]];
Norm[Table[data[[i, 2]] - f[data[[i, 1]]], {i, Length[data]}]]^2
]fittedpars = FindMinimum[criteriaFun[{"Resistor1.R" -> p, "SpringDamper1.d" -> q}, "Inertia2.w"], {{p, 0.1}, {q, 0.25}}, StepMonitor :> PrintTemporary[{p, q}]]sim = SystemModelSimulate[model, {0, 40}, <|"ParameterValues" -> ({"Resistor1.R" -> p, "SpringDamper1.d" -> q} /. fittedpars[[2]])|>];Show[SystemModelPlot[sim, {"Inertia2.w"}, PlotStyle -> Orange], ListPlot[data]]筛选 Tinker Forge Weather Station 的采样数据:
tslux = TemporalData[TimeSeries, {{{Quantity[104.7, "Lux"], Quantity[101.30000000000001, "Lux"],
Quantity[194.9, "Lux"], Quantity[200.8, "Lux"], Quantity[169., "Lux"], Quantity[158.3, "Lux"],
Quantity[174.3, "Lux"], Quantity[169.60000000000002, " ... 3.6042180438464176`17.309385928427066*^9, 3.6042180439474277`17.30938592843924*^9}}}, 1,
{"Discrete", 1}, {"Discrete", 1}, 1, {ValueDimensions -> 1,
MetaInformation -> {"Illuminance" -> TemporalData`Self["PathComponent", 1]}}}, True, 10.];ts = TimeSeriesMap[QuantityMagnitude, TimeSeriesShift[tslux, {{0}}]];filterParameters = {"C1" -> 0.03, "C2" -> 0.115};sim = SystemModelSimulate[[image], {0, ts["LastTime"]}, <|"Inputs" -> {"Vi" -> ts}, "ParameterValues" -> filterParameters|>];SystemModelPlot[sim, {"Vi", "Vo"}]audioIn = Function[t, (2 + Cos[40t])Sin[2000t]];filterParameters = {"C1" -> 0.9, "C2" -> 0.01};
sim = SystemModelSimulate[[image], 2, <|"Inputs" -> {"Vi" -> audioIn}, "ParameterValues" -> filterParameters|>, Method -> {"DASSL", "InterpolationPoints" -> 2 * 44100}]AudioNormalize /@ sim["Audio", {"Vi", "Vo"}]sim = SystemModelSimulate[[image], 20];traj = Table[sim[{"x" <> ToString[i], "y" <> ToString[i]}, ], {i, 5}];Animate[Graphics[Table[{Disk[traj[[i]], 0.5], Line[{{5 - i, 5}, traj[[i]]}]}, {i, 5}] /. -> t, PlotRange -> {{-5, 9}, {-1, 5}}], {t, 0, 20}, SaveDefinitions -> True, AnimationRunning -> False]用 WaveletScalogram 可视化仿真数据:
sim = SystemModelSimulate[\!\(\*GraphicsBox[«8»]\), {0, 10}];data = Table[Evaluate[sim[{"chainLink4.frame_b.r_0[1]"}][[1]][t]], {t, 0, 10, 0.01}];cwd = ContinuousWaveletTransform[data];WaveletScalogram[cwd]属性和关系 (3)
SystemModelSimulate 的输出是一个 SystemModelSimulationData 对象:
sim = SystemModelSimulate[[image], 10]{x, xp} = sim[{"x", "x"'}]用 SystemModelSimulateSensitivity 获取对参数的敏感度:
sim = SystemModelSimulateSensitivity[[image], 10, {"sineVoltage1.f"}];绘制电容上的电压对 "sineVoltage1" 的频率的敏感度:
sim["SensitivityNames"]SystemModelPlot[sim, {{"capacitor1.v", "sineVoltage1.f"}}]将 SystemModelParametricSimulate 应用于一个可对不同的值进行计算的函数:
sols = SystemModelParametricSimulate[[image], "capacitor1.v", {"sineVoltage1.f"}]fns = Table[sols[hz], {hz, 1, 5}]Table[Plot[fn[t], {t, 0, 10}], {fn, fns}]技术笔记
相关链接
文本
Wolfram Research (2018),SystemModelSimulate,Wolfram 语言函数,https://reference.wolfram.com/language/ref/SystemModelSimulate.html (更新于 2022 年).
CMS
Wolfram 语言. 2018. "SystemModelSimulate." Wolfram 语言与系统参考资料中心. Wolfram Research. 最新版本 2022. https://reference.wolfram.com/language/ref/SystemModelSimulate.html.
APA
Wolfram 语言. (2018). SystemModelSimulate. Wolfram 语言与系统参考资料中心. 追溯自 https://reference.wolfram.com/language/ref/SystemModelSimulate.html 年
BibTeX
@misc{reference.wolfram_2026_systemmodelsimulate, author="Wolfram Research", title="{SystemModelSimulate}", year="2022", howpublished="\url{https://reference.wolfram.com/language/ref/SystemModelSimulate.html}", note=[Accessed: 15-November-2026]}
BibLaTeX
@online{reference.wolfram_2026_systemmodelsimulate, organization={Wolfram Research}, title={SystemModelSimulate}, year={2022}, url={https://reference.wolfram.com/language/ref/SystemModelSimulate.html}, note=[Accessed: 15-November-2026]}