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