在 Python 的 SciPy(特别是 solve_ivp)中,“积分器”其实指的是不同的 数值积分方法(Numerical Integrators),也就是用来近似求解微分方程的算法。

下面我来帮你系统地梳理清楚它们的区别。


🧩 一、什么是“积分器”?

对于常微分方程:
[
\frac{dy}{dt} = f(t, y)
]

积分器的任务是:从初始值 (y(t_0)) 出发,用离散的时间步 (h) 一步步推算出 (y(t_1), y(t_2), ...),近似还原函数的连续演化。

不同的积分器在:


⚙️ 二、SciPy 中的主要积分器类型

scipy.integrate.solve_ivp 中,你可以用参数 method= 指定不同积分器:

积分器名 类型 阶数 适用问题 特点
'RK45' Runge-Kutta (Dormand–Prince) 5(4) 阶 一般非刚性 ODE 默认,精度高,速度快
'RK23' Runge-Kutta (Bogacki–Shampine) 3(2) 阶 非刚性 ODE 适合低精度快速估算
'Radau' 隐式 Runge-Kutta 5 阶 刚性 ODE 高稳定性
'BDF' 后向差分公式 (Backward Differentiation Formula) 可变阶(1~5) 刚性 ODE 适合慢变化系统
'LSODA' 自适应算法(FORTRAN 经典库) 自动选择 混合类型 ODE 自动判断刚性/非刚性切换

💡 举例对比

假设方程:
[
\frac{dy}{dt} = -1000y + 3000 - 2000 e^{-t}
]
这个方程非常“刚性”,
如果你用 'RK45',可能需要极小步长才能稳定;
'BDF' 一下子就能稳定收敛。