2026a
# 参数扫动
模型路径为 Modelica 标准库模型中的 Modelica.Mechanics.Rotational.Examples.CoupledClutches。
此示例说明了如何使用 Sysplorer API 进行参数分析。
# 概述
很多情况下,有必要使用不同的参数集来运行仿真模型,通过参数变化对输出变量的影响来观察物理系统的行为,进而深入理解系统的内部机理。
参数扫动是一种典型的参数分析方法,此方法使某一参数按一定序列进行变化,从中可以观察出结果变量的相应变化。
本例提供了一种在 Syslab 中调用 Sysplorer API 来实现参数扫动分析。
# 参数扫动
在示例中,扫动 J1转子的转动惯量,并观察其对 J1和 J2角速度的影响。另 J1的转动惯量按序列 0.9、1.0、1.1、1.2、1.3 变化。
参数扫动使用的脚本如下:
using PyCall
using TyPlot
using SysplorerAPI
# 启动Sysplorer
ConnectSysplorer()
# 加载Modelica 4.0
LoadLibrary("Modelica", "4.0")
mo_source_file = ENV["SYSLAB_HOME"]*"/Examples/08 SyslabWorkspace/mo/CoupledClutches.mo"
mo_file = tempdir()*"/CoupledClutches.mo"
cp(mo_source_file,mo_file,force=true)
chmod(mo_file,0o777)
# 打开模型
OpenModelFile(mo_file)
# 扫动变量值,扫动序列为:0.9、1.0、1.1、1.2、1.3
para_sweep = [0.9, 1.0, 1.1, 1.2, 1.3]
# 结果数组
J1_w_list = []
J2_w_list = []
time_list = []
# 开始实验
for i in 1:5
println("sweep case-$i: J1.J = $(para_sweep[i])")
# 设置变量
SetParamValue("J1.J", string(para_sweep[i]))
# 进行仿真
SimulateModel("CoupledClutches",
stopTime = 1.2, algo = Integration.Dassl)
println("case-$i finished")
# 记录结果
push!(J1_w_list, GetVarValues("J1.w"))
push!(J2_w_list, GetVarValues("J2.w"))
push!(time_list, GetVarValues("time"))
end
# 结果绘图
println("start to plot")
subplot(1,2,1)
hold("on")
for i in 1:5
plot(time_list[i], J1_w_list[i],
label = "J1.w, J1.J = $(para_sweep[i])")
end
hold("off")
grid("on")
legend("on")
subplot(1,2,2)
hold("on")
for i in 1:5
plot(time_list[i], J2_w_list[i],
label = "J2.w, J1.J = $(para_sweep[i])")
end
hold("off")
grid("on")
legend("on")
参数扫动结果为:
