1、有限差分法求解偏微分方程摘要:本文主要使用有限差分法求解计算力学中的系统数学模型,推导了有限差分法的理论基础,并在此基础上给出了部分有限差分法求解偏微分方程的算例验证了推导的正确性及操作可行性。关键词:计算力学,偏微分方程,有限差分法Abstract:This dissertation mainly focuses on solving the mathematic model of computation mechanics with finite-difference method. The theoretical basis of finite-difference is derived
2、 in the second part of the dissertation, and then I use MATLAB to program the algorithms to solve some partial differential equations to confirm the correctness of the derivation and the feasibility of the method.Key words:Computation Mechanics, Partial Differential Equations, Finite-Difference Meth
3、od1 引言机械系统设计常常需要从力学观点进行结构设计以及结构分析,而这些分析的前提就是建立工程问题的数学模型。通过对机械系统应用自然的基本定律和原理得到带有相关边界条件和初始条件的微分积分方程,这些微分积分方程构成了系统的数学模型。求解这些数学模型的方法大致分为解析法和数值法两种,而解析法的局限性众所周知,当系统的边界条件和受载情况复杂一点,往往求不出问题的解析解或近似解。另一方面,计算机技术的发展使得计算更精确、更迅速。因此,对于绝大多数工程问题,研究其数值解法更具有实用价值。对于微分方程而言,主要分为差分法和积分法两种,本论文主要讨论差分法。2 有限差分法理论基础2.1 有限差分法的基本
4、思想当系统的数学模型建立后,我们面对的主要问题就是微分积分方程的求解。基本思想是用离散的只含有限个未知量的差分方程组去近似地代替连续变量的微分方程和定解条件,并把差分方程组的解作为微分方程定解问题的近似解。将原方程及边界条件中的微分用差分来近似,对于方程中的积分用求和或及机械求积公式来近似代替,从而把原微分积分方程和边界条件转化成差分方程组。有限差分法求解偏微分方程的步骤主要有以下几步: 区域离散,即把所给偏微分方程的求解区域细分成由有限个格点组成的网格,这些离散点称作网格的节点; 近似替代,即采用有限差分公式替代每一个格点的导数; 逼近求解,换而言之,这一过程可以看作是用一个插值多项式及其微
5、分来代替偏微分方程的解的过程。从原则上说,这种方法仍然可以达到任意满意的计算精度。因为方程的连续数值解可以通过减小独立变量离散取值的间格,或者通过离散点上的函数值进行插值计算来近似得到。理论上,当网格步长趋近于零时,差分方程组的解应该收敛于精确解,但由于机器字节的限制,网格步长不可能也没有必要取得无限小,那么差分法的收敛性或者说算法的稳定性就显得至关重要。因此,在运用有限差分法时,除了要保证精度外,还必须要保证其收敛性。2.2 系统微分方程的一般形式由于大多数工程问题都是二维问题,所以得到的微分方程一般都是偏微分方程,对于一维问题得到的是常微分方程,解法与偏微分方程类似,故为了不是一般性,这里
6、只讨论偏微分方程。由于工程中高阶偏微分较少出现,所以本文仅仅给出二阶偏微分方程的一般形式,对于高阶的偏微分,可进行类似地推广。二阶偏微分方程的一般形式如下: +=(,)其中, 为弹性体上的某一特征物理量(连续函数) 。当 A、B 、C 都是常数时, (1 )式称为准线性,有三种准线性方程形式: 如果 ,则称为椭圆型方程;=240椭圆型方程主要用来处理稳态或静态问题,如热传导等问题;抛物线方程主要用来处理瞬态问题,如渗透、扩散等问题;双曲型方程主要用来处理振动问题,如玄震动、薄膜震动等问题。除了上述微分方程外,必须给出定解条件,通常有如下三类: 第一类边界条件(Dirichlet 条件): ;|
7、=(,) 第二类边界条件(Neumann 条件): ;|=1(,) 第三类边界条件(Robin 条件): ;+(,)|=(,)其中, 为求解域 的边界, 为 的单位外法矢, 。第二类和 (,)|0第三类边界条件统称为导数边界条件。2.3 有限差分方程的数学基础2.3.1 一元函数导数的差分公式一个函数在 x 点上的导数,可以近似地用它所临近的两点上的函数值的差(1)分来表示。函数 在 处的泰勒展式如下:() =0()=01!()(0)(0)=(0)+()(0)+12!()(0)2+13!(3)()(0)3+对一个单变量函数 ,以步长 将 区间等距划分,我们得到一系() = ,列节点: ,0=,
8、 1=0+=+, 2=1+=+2, , ( ) ,然后求出 在这些节, =1+=+= = ()点上的近似值。与节点 相邻的节点有 和 ,因此在点 处可以构造如 + 下形式的展开式:()=()()+12!()2+2()(+)=()+()+12!()2+2()由式(3)和式(4)可得到: 一阶向前差分:()=(+)() 一阶向后差分:()=()() 一阶中心差分:()=(+)()2不妨,记 ,则式( 5) 、 (6) 、 (7)分别简写为:=() 一阶向前差分:=+1 一阶向后差分:(2)(3)(4)(5)(6)(7)(8)(9)=1 一阶中心差分:=+112根据式(8) 、式(9)和式(10)
9、,可得二阶差分: 二阶向前差分:=+1 =+22+1+2 二阶向后差分:=1 =21+22 二阶中心差分:=+112 =+22+242差分公式(13)是以相隔 2h 的两结点处的函数值来表示中间结点处的一阶导数值,可称为中点导数公式。式(11)和式(12)是以相邻三结点处的函数值来表示一个端点处的一阶导数值,可称为端点导数公式。应当指出:中点导数公式与端点导数公式相比,精度较高。因为前者反映了结点两边的函数变化,而后者却只反映了结点一边的函数变化。因此,我们总是尽可能应用前者,而只有在无法应用前者时才不得不应用后者。但是,由于式(11)中的各阶导数均使用的是向前差分,导致用到的节点不相邻,同时
10、为了均衡误差,将节点 处用到的一阶差分换成向后差分,则式(11)修正为:=+1 =+1 1 =+12+12同理,根据上述推导过程,可得到任意阶的差分公式: n 阶向前差分:(10)(11)(12)(13)(15)(14)()=+1(1)(1) n 阶向后差分:()=(1)1(1) n 阶中心差分:()=+1(1)1(1)2说明,上述公式中各节点处前一阶导数的代入可能存在不一致,可能是向前差分、向后差分或者中心差分,从而使最终的公式在系数上存在差别。当然,也可以对各相邻节点进行需要阶数的泰勒展开,从而建立方程组直接求各阶导数。2.3.2 微分方程转化为线性方程由于三种类型的微分方程解法类似,故这
11、里仅以椭圆型微分方程为例,将微分方程转化为代数方程,对于双曲型和抛物型方程依次类推即可。不妨记:( 称为拉普拉斯算子) , 和 是求解域上的连续函数。2=+2 (,) (,)假设求解区域为: ,将求解区域划分成=(,):0,0,=/个网格,其中: ,如图 1 所示。记 ,(1)(1) =,= ,=(,)则根据式(14)可得到:2=+=+1,2,+1,2 +,+12,+,12=+1,+1,+,+1+,14,2 +(2)(16)(17)(18)1 1 +1 图 1 五点差分公式式(18)也称为五点差分公式,同理根据式(12)和式(13)可分别得到向前差分公式(19)和向后差分公式(20) ,如图(
12、2 所示) 。 向前差分2=+=+2,2+1,+,2 +,+22,+1+,2=+2,+,+2+2,2+1,2,+12 +(2) 向后差分2=+=,21,+2,2 +,2,1+,22=2,+,2+2,21,2,12 +(2)图 2 向前差分(左)和向后差分(右)(19)(20)+1111+1+22111 1 +1+2 12,+1 ,+2 2,2,图 3 中心差分、向前差分和向后差分的拉普拉斯算子表示利用中心差分公式(18) ,由于式(18)在点 处具有二阶精度(,)=(,)( ) ,所以式(18)可近似改写成下式:(2)2,+1,+1,+,+1+,14,2根据椭圆方程的具体形式可以将其分为以下三
13、种形式: 拉普拉斯(Laplace )方程: 2=0 泊松(Poison )方程: 2=(,) 赫耳墨次(Helmholtz )方程: 2+(,)=(,)根据式(21) ,可建立三种不同形式椭圆方程的代数方程如下: 拉普拉斯方程: 2=00=2,+1,+1,+,+1+,14,2化简后得到拉普拉斯方程的计算公式: +1,+1,+,+1+,14,=0 泊松方程: 2=(,)+1,+1,+,+1+,14,2,=0 赫耳墨次方程: 2+(,)=(,)+1,+1,+,+1+,1+(2,4),2,=02.3.3 建立有限差分方程组根据式(22)(24)建立方程组,但是需要知道对应的边界条件才能使方程组存在
14、定解,根据 2.2 中可知,边界条件一般分为狄利克雷边界条件和导数1, 4,+1,12,+12+1,+2,2, ,22,121,(21)(22)(23)(24)边界条件两种,下面分别给出这两种边界条件的有限差分方程组的建立过程: 狄利克雷边界条件: |=(,)对于狄氏条件而言,给出了边界上各节点出的函数计算公式,直接代入节点值 计算即可,如下所示为矩形区域的边界点计算:(,)(左边界)(1,)=1,=(1,)(1)(右边界)(,)=,=(,)(1)(下边界)(,1)=,1=(,1)(1)(上边界)(,)=,=(,)(1) 导数边界条件:(,)=0以右边界点为例,对于右边界点 ,根据 Neuma
15、nn 条件可得下式:=(,)=(,) =(,)=0对于拉普拉斯方程,根据计算公式(22) ,对于边界上的点 可得:(,)+1,+1,+,+1+,14,=0显然,上式中的 在求解域外,是未知量。根据中心差分公式(10)可得+1,到:(,)+1,1,2根据式(28)可得到逼近表示: ,并且具有 2 阶逼近精度,代入+1,1,式(27)可得下式: 21,+,+1+,14,=0同理,对于其它边界可获得如下边界方程:(下边界)2,2+1,1+1,14,1=0(上边界)2,1+1,+1,4,=0(左边界)22,+1,+1+1,141,=0(25)(26)(27)(28)(29)(30)图 4 Neuman
16、n 条件算子对于泊松方程和赫耳墨次方程同样根据上述方法,获得边界条件的线性方程,然后将这些方程添加到式(22)(24 )所建立的方程组中,从而建立起个 元的线性方程组,解该方程组即可获得各节点的函数值。(1)(1)对于上述过程建立的线性方程组的求解,可采用多种方法,比如 Jacob 迭代法、Gauss-Seidel 迭代法、超松弛迭代法( SOR 法) 、高斯消元法等方法求解。2.4 有限差分法的收敛性和稳定性由于迭代法必须保证收敛性,所以在解有限差分方程组时还应保证其收敛性,也就是通常所说的算法稳定性。有限差分法的算法稳定性可以通过特征值方法、傅里叶变换(冯诺依曼条件)以及能量估计等方法来判断,下面给出常用的冯诺依曼条件: 向前差分: ,绝对收敛;1 向后差分: ,绝对收敛;0 中心差分:对任何的 对不收敛;假设求解域内 方向网格划分的步长为 , 方向网格划分的步长为 ,将偏 微分方程化为标准形式,具体来说标准形式如下: 双曲方程:(31)