我编写了一个 Python 3 包,可以集成常微分方程系统。在写这篇文章时,我遇到了一个我似乎找不到任何信息的问题。
问题:
基本上我有一个自适应算法,可以根据局部误差调整步长(实际方法是使用 Cash-Karp 系数的 RKF 算法的实现),并且在某个点之后,如果步长足够大,该方法将超过结束时间。
我的解决方案:
我已经设置好了,如果当前步长会导致积分超过结束时间,那么我将步长设置为剩余时间值的一半。方程形式:dt = (t_end - t_current)/2
但这对自适应算法中使用的相对误差有一定的要求,会导致时间步长变得微不足道。大约在 1e-15 的数量级上,这会导致数值不稳定,因为由于机器精度的限制,t_current 永远不会增加。
我的问题:
我想知道是否有更有效的方法来实现积分算法,以便结束时间相对于预期结束时间精确到小数点后 15 位,而不会产生这种数值不稳定性。