数值分析学习笔记--常微分方程初值问题的数值解法
应用纳维-斯托克斯方程对导管中的气流进行模拟
如有疏漏,敬请指正。
对于一个常微分方程(ODE)
只有一些特殊形式的$f(x,y)$,才可以求它的解析解。对于大多数常微分方程的初值问题,只可以计算其数值解。
对区间$[a,b]$进行一个剖分,确定点列$\lbrace x_n,n=1,2, \cdots ,m \rbrace$,使用函数在这一组点列上的函数值$\lbrace y(x_n), n=1,2, \cdots ,m \rbrace$描述$y(x)$,求解$y(x_n)$的数值方法,是为有限差分方法。
约定$y(x_n)$是常微分方程准确解的值,$y_n$是$y(x_n)$的近似值。把区间分割为小区间的形式,称为数值离散方法。
除了有限差分方法外,有限元方法与有限体积方法也可以求解ODE的数值解。
欧拉公式
欧拉方法的图示,待求的曲线为蓝色,它的折线近似为红色。
对区间$[a,b]$进行等距剖分,记步长$h=\frac{b-a}{m}$,那么$\lbrace x_n=a+nh,n=0,1, \cdots ,m \rbrace$。可以使用差商近似导数来求解ODE。
- 向前差商
作出$y’(x)$在$x=x_n$处的一阶向前差商而由微分方程可得这样就可以得到计算$y_{n+1}$的向前欧拉公式不难发现,向前欧拉公式是一个显式求解格式。 - 向后差商
作出$y’(x)$在$x=x_{n+1}$处的一阶向后差商又因为$y’(x_{n+1})=f(x_{n+1},y(x_{n+1}))$,得到向后欧拉公式不难发现,这是一个隐式求解格式。设$f(x,y)$对$y$满足Lipschitz条件,那么可以使用Picard格式求解向后欧拉公式。在实务中,一般先用显式格式先算出初始值,再用隐式公式进行进一步的迭代。这样的过程被称为预估-校正过程。向后欧拉公式的预估-校正式如下所示: - 中心差商
类似前面的方法,可得中心差商式为这不是一个稳定的格式,因此在实务中不予采用。
欧拉公式的局部截断误差
对$y(x_{n+1})$在$x_n$进行泰勒展开
不难发现局部截断误差是
欧拉公式的改进
对于方程$\frac{\mathbf{d}y}{\mathbf{d}x}=f(x,y)$在区间$[x_n,x_{n+1}]$上进行积分再移项
取梯形公式计算数值积分
得到梯形公式
使用显式欧拉公式与梯形公式组成预估-校正公式
这被称为改进的欧拉公式。
Runge-Kutta方法
在二阶Runge-Kutta方法中,使用$f(x,y)$在点$(x_n,y(x_n))$以及其附近的点$(x_n+ah,y(x_n)+bhf(x_n,y(x_n)))$上的值的线性组合得到数值公式
这时,需要满足
不难看出,这个方程组有无数多组解。
一个比较常用的二阶Runge-Kutta公式为
一个比较常用的三阶Runge-Kutta公式为
一个比较常用的四阶Runge-Kutta公式为
Runge-Kutta方法是一个在工程中应用很广泛的算法。
线性多步法
对于方程$\frac{\mathbf{d}y}{\mathbf{d}x}=f(x,y)$在区间$[x_{n-p},x_{n+1}]$上进行积分得
使用数值积分进行近似,从而构造线性多步格式。
如果使用积分节点$\lbrace x_n,x_{n-1}, \cdots ,x_{n-q} \rbrace$进行近似计算(详见插值型数值积分),那么这就是一个显式求解格式。如果积分节点是$\lbrace x_{n+1},x_n,x_{n-1}, \cdots ,x_{n+1-q} \rbrace$,那么这就是一个隐式求解格式。
把$p=0$的格式称为Adams公式。
常微分方程组的数值解法
对于一个常微分方程组,可以把解常微分方程的各种方法平行地应用到方程组的求解中。
例如,对于下面一个方程组
其改进的欧拉公式为
高阶常微分方程的数值方法
对于高阶常微分方程,可以将其转换为一阶常微分方程组。
考虑一个二阶常微分方程
可以将其转换为
对于更高阶的方程,也可以进行类似的转换。