2026a

# 参数扫动


模型路径为 Modelica 标准库模型中的 Modelica.Mechanics.Rotational.Examples.CoupledClutches。

此示例说明了如何使用 Sysplorer API 进行参数分析。

# 概述

很多情况下,有必要使用不同的参数集来运行仿真模型,通过参数变化对输出变量的影响来观察物理系统的行为,进而深入理解系统的内部机理。

参数扫动是一种典型的参数分析方法,此方法使某一参数按一定序列进行变化,从中可以观察出结果变量的相应变化。

本例提供了一种在 Syslab 中调用 Sysplorer API 来实现参数扫动分析。

# 参数扫动

在示例中,扫动 J1转子的转动惯量,并观察其对 J1J2角速度的影响。另 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")

参数扫动结果为: