Matlab 使用CoolProp时在Simulink中动态减小步长

Matlab 使用CoolProp时在Simulink中动态减小步长,matlab,exception-handling,simulink,Matlab,Exception Handling,Simulink,我有一个模型,它调用一个库,从S函数计算热力学性质。如果该库的输入没有意义,该库会引发错误并突然停止模拟,这有时会在Simulink扰动状态时发生,尤其是当模型中存在阶跃块时,即使其输出是浮动的!我认为这是一种预测系统状态变化的尝试,我注意到减小步长可以减少问题,但我无法在10秒的时间内运行20000次模拟是的,微秒!时间步长,当它已经需要15分钟,步长为5秒 我想,有没有一种方法可以捕捉到调用error引起的错误,然后告诉Simulink Ehy,您使用的步长太大了 编辑:我使用的是ode45

我有一个模型,它调用一个库,从S函数计算热力学性质。如果该库的输入没有意义,该库会引发错误并突然停止模拟,这有时会在Simulink扰动状态时发生,尤其是当模型中存在阶跃块时,即使其输出是浮动的!我认为这是一种预测系统状态变化的尝试,我注意到减小步长可以减少问题,但我无法在10秒的时间内运行20000次模拟是的,微秒!时间步长,当它已经需要15分钟,步长为5秒

我想,有没有一种方法可以捕捉到调用error引起的错误,然后告诉Simulink Ehy,您使用的步长太大了


编辑:我使用的是ode45解算器,但即使使用ode23tb或ode15s,也不会发生任何变化,除了模拟时间会显著增加。

我假设您使用的是固定步长解算器,您可能希望改为使用可变步长解算器,该解算器将根据模型的操作动态调整步长。如果您有一个数字刚性系统(看起来是这样的),您可能希望使用ode15s或ode23t。可以将解算器步长限制在最小和最大步长之间。有关更多详细信息,请参见文档中的

我使用的是可变步长解算器ode45,但对于ode23tb或其他解算器,问题仍然存在。但是,当数值没有意义时,CoolProp会使模拟中止,而我想告诉Simulink在这种情况下会减小当前步长。你不能。解算器根据模型的动力学而不是用户来决定步长。您可以尝试更改解算器设置,例如减小最小步长或更改某些公差,但仅此而已。我也会尝试ODE15。就像我说的,解算器决定步长,而不是用户。