我正在使用ode15s
函数在MATLAB中求解DAE系统,并且在模拟中的某个时刻,求解器无法达到必要的容差,并且执行终止。如果我将最大步长减小到一个较小的值(~1e-5),程序就可以继续并到达指定的端点。
基于减少时间步长允许程序继续的事实,我怀疑ode15s
脚本在某个时刻花费了太大的时间步,并且无法从中恢复。但是,保持这个小的最大步骤意味着我有数千个不必要的数据点,这会减慢模拟速度并占用空间。
首先,ode15s
可以调整最大步长吗?到目前为止我发现的一切都表明这是不可能的,但我可能会遗漏一些东西。
如果那是不可能的,我可以通过等待函数超过临界时间(即,模拟将在没有时间步长约束的情况下崩溃的时间)来近似行为,停止它,然后重新启动时间步长约束。但是,我不知道先验的临界时间,并且在最终的模拟中(当前的模拟是高度简化的),我将在不同的位置有几十个初始条件,所以我将无法手动调整所有的在合理的时间内完成的时间。我将如何以自动方式查找关键时间,以便在通过后调整步长?