python 关于周期性的 ODE 求解器
ODE solver for python respecting periodicity
我想集成一个控制问题,即形式为 dx/dt = A.f(t) 的 ODE,其中
x(t) 是 R^3 中的函数,f(t) 是 R^4 中的函数,A 是 3x4 矩阵。在我的特殊情况下,f(t) = F'(t),即函数 F 的时间导数。此外,F 是 1-周期的。因此,在区间 [0, 1] 上对 ODE 进行积分应该会再次产生起始位置。但是,scipy.integrate
中的 solve_ivp
等方法根本不考虑这种周期性(我已经尝试了所有可能的方法,例如 RK45, Radau, DOP853, LSODA
)。
是否有一种特殊的 ODE 求解器可以高度精确地遵守这种周期性?
无论如何,所有算法都会遭受精度损失,因此您很可能永远无法实现精确的周期性。尽管如此,您也可以尝试通过使用参数“atol”和“rtol”来提高积分的精度,这大致会使每个时间步的积分误差保持在 (atol + rtol*y) 以下。您通常可以低至 atol=rtol=1e-14.
我想集成一个控制问题,即形式为 dx/dt = A.f(t) 的 ODE,其中
x(t) 是 R^3 中的函数,f(t) 是 R^4 中的函数,A 是 3x4 矩阵。在我的特殊情况下,f(t) = F'(t),即函数 F 的时间导数。此外,F 是 1-周期的。因此,在区间 [0, 1] 上对 ODE 进行积分应该会再次产生起始位置。但是,scipy.integrate
中的 solve_ivp
等方法根本不考虑这种周期性(我已经尝试了所有可能的方法,例如 RK45, Radau, DOP853, LSODA
)。
是否有一种特殊的 ODE 求解器可以高度精确地遵守这种周期性?
无论如何,所有算法都会遭受精度损失,因此您很可能永远无法实现精确的周期性。尽管如此,您也可以尝试通过使用参数“atol”和“rtol”来提高积分的精度,这大致会使每个时间步的积分误差保持在 (atol + rtol*y) 以下。您通常可以低至 atol=rtol=1e-14.