第1章有限差分法的基础知识
有限差分法、有限体积法和有限元法是广泛应用的求解偏微分方程(partial differential equation,PDE)的数值方法.有限差分法的概念直观、应用简单,是发展较早且比较成熟的数值方法.有限差分法一般要求结构网格,适用的计算区域较为简单.对于一个由偏微分方程及其边界条件和初值所构成的数值求解问题,有限差分法将求解区域划分为有限个离散点(网格点),将方程中的偏导数用代数差商代替,用一组代数方程近似地替代原来的偏微分方程,进而求出离散网格点处的数值解.本章,我们以一些简单的偏微分方程为例,介绍有限差分法的基本概念和差分格式的构造方法,以及理论基础,包括相容性、收敛性和稳定性.
1.1偏微分方程的差分离散:一个实例
考虑一维非定常热传导方程:
(1.1)
其中u为温度,常数a>0为热扩散系数.设方程(1.1)的求解域为初始条件和边界条件分别为
(1.2)
根据偏微分方程理论,方程(1.1)和初边值条件(1.2)构成了一个适定的定解问题.
为了用有限差分法数值求解问题(1.1)-(1.2),我们*先将连续的求解域划分为一系列离散的时空网格节点,如图1.1所示.这里采用均匀网格节点划分:
其中为空间步长,为时间步长.用表示网格节点处的数值解.然后,将式(1.1)中的时间导数用向前差商、空间导数用第n时间层上的中心差商替代,得到一个近似的差分方程
(1.3)
上式对于每个非边界处的,成立,也就是上式中涉及
的边界处的值由下述对初始条件和边界条件(1.2)的离散给出
(1.4)
方程(1.3)是一个代数方程,可改写成一个计算的公式:
(1.5)
其中差分方程(1-3)或(I.5)称为FTCS格式(Forward difference in Time,Centraldifference in Space)这种由前一时间步的值,可直接计算下一时间步的值的格式,称为显式格式.
类似地,如果时间导数用向后差分而空间导数用*新时间层上的中心差分近似,则可得差分方程
(1.6)
(1.6)式称为BTCS格式(Backward difference in Time,Central difference in Space),可改写成计算格式
(1.7)
与FTCS格式不同,BTCS格式中同时涉及n+1时刻的多个未知量,不能直接求出解,需要解代数方程组才能得到解,这种格式称为隐式格式.
代数方程(1.7)可以在内点处列出,再加上已知的和边界点处的边界条件,形成形如
(1.8)
的关于个未知量的三对角线方程组.上述方程组可用追赶法(如参见)或调用线性代数软件库(比如LAPACK等)高效求解.
通过本节内容我们看到,从微分方程到差分方程的离散过程主要涉及使用基于离散点的网格函数来表示原始函数,以及用有限差分逼近导数.差分逼近会产生截断误差.误差的产生和传播是数值方法研究的主要内容.
1.2导数的差分逼近的截断误差
假设函数足够光滑,我们可以用Taylor级数展开式分析差分逼近的截断误差.例如用单侧差商逼近导数时,
利用Taylor公式将在处展开可得
(1.9)
其中表示在的过程中,量级不超过的量,下标表示相应量在处的取值.于是,向前差商逼近可以表示为
(1.10)
这里称为差分追近的截断误差(truncationerror).由于截断误差的*项为网格步长的一次幂函数,我们称的一阶精度的差分逼近.
类似地,一阶导数的向后差分逼近有
(1.11)
中心差分逼近:
(1.12)
四点三阶精度迎风偏斜差分近似:
(1.13)
二阶导数、d2uidx%的三点中心差分近似及其截断误差为
(1.14)
1.3导数的差分逼近的构造方法
这里仅介绍两种一般的方法:待定系数法和差分算子法[2].
1.3.1待定系数法
例如,要构造导数iPuldx、的某种差分逼近,*先要确定差分近似所用的“模板点”.假如我们希望用三个网格点,作为模板点构造[du/dx^的差分逼近,可以把差分逼近的表达式写成待定系数的形式:
(1.15)
其中,是待定系数.
将式(1.15)中的和在点处做Taylor级数展开,得到
(1.16)
如果要和符合到二阶精度,那么待定系数要满足以下三个条件:
(1.17)
解得
将其代回式(1.16)并考虑到式(1.15),得到
(1.18)
类似地,用这三个网格点作为模板可得
(1.19)
以上两个差分逼近的精度都为—般地,当网格均匀时,用m+1个连续网格点处的函数值逼近的精度*高为m阶.这和用m+1个点构造拉格朗日(Lagrange)插值多项式,然后对其求一阶导数所得的逼近精度是一样的.待定系数法也可被应用于非等距网格的情形和高阶导数的逼近.
例如,考虑在非等距网格上构造的差分逼近,要求用三点模板.设差分近似的形式为
将和在点处做Taylor级数展开,让系数a,b,c满足类似于式(1.17)的相容性和*高精度要求,即可解出这些系数.*后可得[3]
(1.20)
1.3.2差分算子法
所谓算子是一种前置运算符.算子和它后面的被作用量一起代表一种确定的运算过程.引入算子的目的是简化各种运算的形式及推导过程.算子之间也可以定义各种运算,如加法和乘法.特别地,如果算子对于任意实数,和元素,满足
(1.21)
则称为线性算子.
下面定义一些差分方法中常用的算子.
(1)移位算子:
(2)向前差分算子:,这里1表示恒同算子
(3)向后差分算子:
(4)算术平均算子:
(5)一倍步长中心差分算子:
(6)二倍步长中心差分算子:
(7)二阶差分算子:
这些差分算子都是线性算子,满足加法的交换律和乘法的结合律.
1.3.2.1移位算子与微分算子的关系
记微分算子:于是.由Taylor公式:
因此
以表示时间或空间步长,上面的关系可以统一写为
(1.22)
展开