是否有任何使用协程并产生结果而不是函数并返回的 ODE 求解器包?
简而言之,编程语言中的子程序进行一些计算,将结果返回给调用它的人,然后就完成了。协程进行一些计算,为调用它的人产生结果,然后可以在它上次产生值的地方恢复。在 Python 中,协程用于实现生成器。
对于一些涉及求解 ODE 系统的科学应用,关于积分多长时间的逻辑可能非常复杂。例如,如果您正在编写一些代码来创建矢量场的流图,那么如果 (1) 它还不够长并且 (2) 它不太接近您已经计算的所有其他积分曲线。第二个停止条件要复杂得多,涉及某种空间数据结构,如 KD 树。大多数 ODE 求解例程(例如 SciPy 的solve_ivp
函数)为您提供的选项数量非常有限,用于何时停止积分,您必须从一开始就决定您的标准是什么。
相比之下,很容易编写一个自适应积分方案,它会产生积分曲线上的下一个点、该点的向量场值以及它使用的时间步长。ODE 集成例程不关心调用者希望它运行多长时间。它可能是屏幕保护程序的一部分,并且会一直运行,直到用户摆动鼠标。