SciPy:集成期间solve_ivp的状态

问题描述

我正在使用scipy.integrate.solve_ivp在Python中运行长时间的ODE集成。在例程运行时,是否可以访问集成状态或检查例程位于哪个集成步骤?我的整合花费了比预期更长的时间,我想知道整合者是停留在某个步骤还是单个步骤花费的时间真的很长。

用于将来的任务;如果我将与solve_ivp的集成拆分为子间隔以在其间打印状态消息,这是否会干扰某些求解器的步长适应性?

感谢您的反馈!

解决方法

存在一个GitHub pull请求,用于向Solve_ivp添加一个详细选项,但这尚未完成。您可以自己修改scipy的resolve_ivp函数(应该很简单)来实现它,也可以只打印求解器给ODE函数指定的时间t。我就是做这个的。如果您的系统不是太小,那么您就不会因为打印而浪费很多时间。

按照建议的工作方式拆分集成,但是,如果每隔几个时间拆分一次,则由于求解器重新启动每个图块,您将浪费时间。这种影响与隐式算法有关,因为它们在每次启动时都会重新计算系统的雅可比行列式。