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