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