有限差分法(Finite Difference Method,FDM)是一种求解微分方程数值解的近似方法,其主要原理是对微分方程中的微分项进行直接差分近似,从而将微分方程转化为代数方程组求解。有限差分法和有限元法是求微分方程近似解的两种重要的数值方法,它们的共同特点是将连续的问题和区域进行各种形式的离散,最后化为有限形式的线性代数方程组。有限差分法与有限元法的最大区别在于前者的处理直接施加于所给的微分方程本身,而后者则需要先把微分方程化成其他形式的数学问题再加以处理。它们的共同点决定了这两种方法在总的处理思路和大的步骤上有不少相同或类似之处,而它们的不同点又导致了这两种方法的具体操作实施具有无法比拟的各自的特殊性。
先从比较简单的两点边值问题 的差分法讲起。
解两点边值问题的差分方法
考虑最简单的常微分方程边值问题
Lu≡− dx2d2u+qu=f,x∈(a,b),(1)
u(a)=α0,u′(b)+βu(b)=α1,(2)
其中, q,f∈C0([a,b]),q⩾0,α0,α1,β 为给定常数 (β>0) 。(1)式中 L 为微分算子( L 用白正体字母表示,今后同)。
用差分法求解边值问题(1)的过程可以分成 5 步。本小节先讨论前三步,其后的两步不太相同。
第一步,区域的离散
将区间 [a,b] 分成 N 等分,分点为
xi=a+ih,i=0,1,⋯,N,
这里,h=Nb−a,xi 被称为网格上的结点,h 称为步长。
第二步,微分方程离散。
由 Taylor 展开公式,在结点 xi 处,成立
u′′(xi)=h21[u(xi+1)−2u(xi)+u(xi−1)]−12h2u(4)(ξi)xi−1⩽ξi⩽xi+1.(3)
记余项
Ri(u)=−12h2u(t)(ξi),(4)
则在 xi 处可将方程(1)写成
−h2u(xi+1)−2u(xi)+u(xi−1)+q(xi)u(xi)=f(xi)+Ri,(5)
舍去余 项,便得到逼近方程(1)的差分方程:
Lhui≡−h2ui+1−2ui+ui−1+qiui=fi,i=1,2,⋯,N=1,(6)
其中, qi=q(xi),fi=f(xi) ,而 ui 是 u(x) 在 xi 处的近似值,也就是所要寻找的差分解。(6)式中 Lh 为差分算子( Lh 用白正体字母表示,今后同)。
利用差分算子 Lh ,(5)可写成:
Lhu(xi)=f(xi)+Ri,
所以, R∗i 就是差分算子 L∗h 代替微分算子 L 所引起的截断误差,它的阶是 O(h2) 。
第三步,边界条件的处理。
在(6)式中出现了 N+1 个未知量 u0,u1,⋯,uN−1,uN ,但只有 N-1 个方程,所缺的两个方程可以通过对边界条件的处理来获得。
对于第一类边界条件,如在左端 x=a 处,只要直接将函数值代入就行了,即取
u0=u(a)=α0
对于第三类边界条件,如在右端 x=b 处,就需要处理 u(x) 的导数值。容易想到的是取它的一阶差商,如取
u′(b)≈huN−uN−1,
但这样做将使得边界点上的截断误差(为 O(h) )低于内点的截断误差;而由于 xN 是端点,又不能采取具有 O(h2) 精度的中心差分,所以在实际中常常采用二阶 Gear 公式。由前面章节,有
u(x+2h)−34u(x+h)+31u(x)=32hu′(x+2h)+O(h2).(7)
令 x+2h=x_N ,舍去余项,即有近似式:
u′(b)≈2h1(3uN−4uN−1+uN−2),
于是,(2)式的后一个条件可处理成
2h1(3uN−4uN−1+uN−2)+βuN=α1.(8)
区间的剖分和边界条件的处理可采取多种多样的形式。比如,若 u(x) 能够被光滑地延拓到区间 [a,b] 之外,则可取分点
x_j=a+(j−21)h,j=0,1,2,⋯,N,(9)
其中 h=N−1b−a ,这时分点 x0=a−2h 和 xN=b+2N 将在 [a,b] 之外。
对于结点 x0,x1,⋯,xN ,同样可以列出(3.6)式所示的 N−1 个方程,不足的两个方程可由边界条件来提供。利用
21[u(x1)+u(x0)]=u(a)+8h2u