对于一个一阶线性微分方程,

$$\frac{dy}{dx} = f(x, y), x \in (x_{start}, x_{end})$$

给定初值\(y(x_0) = y_0\), 一般来说, 当\(f\)是一个具有好的性质的函数时, 例如连续可导, 那么该问题是具有唯一解的. 本文主要介绍如何在有限的步长得到更高的精度, 实际上就是Runge-Kutta算法的思路.

从微分到差分

数值求解微积分问题的第一步都是将微分形式变成差分形式, 例如上述的微分方程的左边, 我们可以将其改写成

$$\frac{dy}{dx} \sim \frac{y_{n+1}-y_n}{x_{n+1} - x_n}=f(x_n,y_n)$$

写成上面这种形式似乎就已经可以得出一个递推公式进而求解, 那就是

$$y_{n+1} = y_n + (x_{n+1} - x_n)f(x_n,y_n) = F(x_n, x_{n+1}, y_n)$$

如此递推就可以从初始值开始推出给定区间上的一系列离散的函数值了. 但是考虑到精度的问题, 这种使用差分替换掉微分的方式是很粗糙的, 应该可以使用更高阶的方法来降低误差.

下面用图形形象地表达上式的几何意义.

微分中值定理