Dymola带初始条件运行线性化模型的实现方法咨询
Dymola带初始条件运行线性化模型的实现方法
Dymola同时提供内置实现方案和自定义代码扩展方案,不需要额外开发复杂逻辑即可实现需求:
内置实现方法(推荐)
- 线性化阶段直接指定初始条件:调用
linearize()生成StateSpace对象时,可直接传入从dsin.txt中提取的初始变量和对应值,命令格式为
生成的StateSpace对象会自动携带对应初始状态,无需后续二次赋值。ssObj = linearize("目标模型全路径", initialNames=变量名数组, initialValues=对应初始值数组) - 已有StateSpace对象/已导出dslin.mat的场景:加载dslin.mat得到StateSpace对象后,直接修改其
x0属性即可绑定初始条件,格式为ssObj.x0 = 按状态顺序排列的初始值数组。你可以调用print(ssObj.stateNames)打印线性化模型的状态变量顺序,和dsin.txt中的变量逐一核对后赋值即可。 - 线性模型仿真阶段直接传入初始条件:调用内置仿真函数时可直接传入初始值,不需要修改StateSpace对象本身,命令格式为
simulateLinear(ssObj, stopTime=仿真时长, x0=初始值数组),仿真结果会自动存储在返回的结果对象中。
自定义代码实现方案
如果你需要对仿真过程做自定义控制,可直接调用Dymola内置的数值积分函数对StateSpace的状态方程做求解:
状态方程格式为 dx = ssObj.A * x + ssObj.B * u,输出方程为 y = ssObj.C * x + ssObj.D * u,你只需要将从dsin.txt中提取的初始值作为x的初始值传入积分函数即可,全部逻辑代码不超过10行。
注意:初始值数组的顺序必须和
ssObj.stateNames的顺序严格一致,否则会出现初始条件错位的问题,赋值前务必先核对变量顺序。
内容的提问来源于stack exchange,提问作者Axel Schweiß
相关产品推荐
相关产品推荐

