【问题标题】:Reduce step size dynamically in Simulink when using CoolProp使用 CoolProp 时在 Simulink 中动态减小步长
【发布时间】:2015-03-27 18:08:22
【问题描述】:

我有一个模型,它从 S-Function 调用用于热力学特性计算 (CoolProp) 的库。如果输入无意义,此库会引发错误并突然停止仿真,这有时会在 Simulink 扰乱状态时发生,尤其是当模型中存在 Step 模块时,即使其输出是浮动的!我认为这是预测系统状态变化的尝试,我注意到减小步长可以减少问题,但是我无法在 10 微秒(是的,微秒!)时间步长上运行 20'000 秒的模拟。 5 s 步长已经需要 15 分钟!

有没有办法捕获该错误(我想是通过调用 error() 引发的)并告诉 Simulink“哎呀,您使用的步长太大”?

编辑:我正在使用ode45 求解器,但即使使用ode23tbode15s 也没有任何变化,除了模拟时间显着增加。

【问题讨论】:

    标签: matlab exception-handling simulink


    【解决方案1】:

    我假设您使用的是固定步长求解器,您可能希望考虑使用可变步长求解器,它会根据模型的行为动态调整步长。如果您有一个数值刚性系统(似乎是这种情况),您可能希望使用ode15sode23t。您可以将求解器步长限制在最小和最大步长之间。有关详细信息,请参阅文档中的Choosing a solver

    【讨论】:

    • 我正在使用可变步长求解器(ode45,但使用 ode23tb 或其他问题仍然存在)。但是,当值没有意义时,CoolProp 会使仿真中止,而我想告诉 Simulink 在这种情况下会减小当前步长。
    • 你不能。求解器根据模型的动态而不是用户来决定步长。您可以尝试更改求解器设置(例如减小最小步长或更改某些容差),仅此而已。我也会尝试ode15s
    • 就像我说的,求解器决定步长,而不是用户。
    猜你喜欢
    • 1970-01-01
    • 2021-09-01
    • 2013-04-11
    • 2019-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-17
    相关资源
    最近更新 更多