我有一个模型,它从S函数调用一个库进行热力学性质计算(CoolProp)。如果其输入无意义,此库会引发错误并突然停止模拟,这有时会在Simulink扰乱状态时发生,特别是当模型中存在Step
块时,即使其输出为浮动的!我认为这是一个预见系统状态变化的尝试,我注意到减小步长可以减少问题,但我无法在10 us(是的,微秒!)时间步进行模拟20'000 s已经花了15分钟,步长为5秒!
有没有办法捕捉到这个错误(通过调用error()
来提出,我猜)并告诉Simulink“Ehy,你使用的步长太大了”?
编辑:我正在使用ode45
解算器,但即使使用ode23tb
或ode15s
也没有任何变化,除了模拟时间显着增加。
答案 0 :(得分:0)
我假设您正在使用固定步长求解器,您可能希望使用变步长解算器,这将根据模型的动态调整步长。如果你有一个数字僵硬的系统(似乎是这种情况),你可能想要使用ode15s
或ode23t
。您可以将求解器步长约束在最小和最大步长之间。有关详细信息,请参阅文档中的Choosing a solver