常微分方程的数值解及实验.ppt
第4章 常微分方程数值解法,1 引言 2 欧拉法和改进的欧拉法3 龙格库塔法4 阿达姆斯方法5 二阶线性常微分方程边值问题的数值解,1 引言,在常微分方程中,我们已经掌握了一些典型方程的解法。但许多形式的方程只能用数值方法求近似解,也就是求在某些点上满足一定精度的近似解。现以求一阶常微分方程初值问题,(41),在区间a,b上的解为例,介绍数值方法的基本思想。设f(x,y)在带形区域 R:axb,-y+上为x,y的连续函数,且对任意的y满足李普希茨(Libusize)条件 f(x,y1)-f(x,y2)Ly1-y2(42)其中(x,y1)、(x,y2)R,L为正常数。在求初值问题(41)的数值解时,我们通常采用离散化方法(数值微分、数值积分、泰勒展式等),求在自变量x的离散点 a=x0 x1x2xn=b,图 4.1,上的准确解y(x)的近似值 y0,y1,y2,yn 常取离散点x0,x1,x2,xn为等距,即 x i+1-xi=h,i=0,1,2,n-1 h称为步长。图41表示为初值问题(41)在n+1个离散点上的准确解y(x)的近似值。,2 欧拉法和改进的欧拉法,2.1 欧拉法(折线法)若将函数y(x)在点xi处的导数y(xi)用差商来表示,即,再用yi近似地代替y(xi),则初值问题(41)就化为,(43),式(43)就是所求的欧拉公式。,欧拉公式有很明显的几何意义。我们知道初值问题(41)中的微分方程的解是xoy平面上的一簇积分曲线,这簇积分曲线上任意点(x,y)?的斜率为f(x,y),而初值问题(41)的解是过点(x0,y0)的一条特定的积分曲线。,例1 用欧拉法求初值问题,的数值解(取h=0.1)。解 因为,故由欧拉计算公式(43)得,(44),表 41,图 4.2,图 4.3,2.2 改进的欧拉法 欧拉法虽然形式简单,计算方便,但比较粗糙,精度也低。特别当y=y(x)?的曲线曲率较大时,欧拉法的效果更差。为了达到较高精度的计算公?式,对欧拉法进行改进,将在一点(xi,yi)的切线斜率f(xi?,yi)用两点的平均斜率来代替,即,代入(43)式得,(45),这样得到的点列仍为一折线,只是用平均斜率来代替原来一点处的斜率。式(45)称为改进的欧拉公式。,不难发现,欧拉公式(43)是关于yi+1的显式?,只要已知yi,经一次计算可立即得到yi+1的值;而改进的欧?拉公式(45)中的yi+1以隐式给出,且yi+1含在函数f(xi+1,yi+1)中,因此?,通常用迭代法求解。具体做法是:先用欧拉公式(43)?求出一个y(0)i+1作为初始近似,然后再用改进的欧拉公式(45)进行迭代,即,直到满足,(为预给精度),取,再转到下一步计算。这里必须特别说明,因为初值问题(41)满足李普 希茨条件,当h足够小时,可使得,于是有,当k时,有qk0,故公式(46)收敛。,2.3 预估校正法 改进的欧拉公式在实际计算时要进行多次迭代,因而计算量较大。所谓预估校正法,就是先用(43)式算出yi+1的预估值y(p)i+1,然后再用(45)式进行一次迭代便得到校正值y(c)i+1,即,(47),预估:,校正:,并取,虽然式(47)仅迭代一次,但因进行了预先估计,故精度却有较大的提高。在实际计算时,还常常将式(47)写成下列形式:,(48),2.4误差估计 初值问题(41)的等价积分方程为,(49),若对式(49)右端的积分采用各种不同的近似计算方法,就可以得到初值问题(41)的各种不同的数值解法。例 如积分采用左矩形公式,图 4.4,用yi、yi+1分别代替y(xi)、y(xi+1)便得到欧拉公式(43)。若积分采用梯形公式,在进行误差分析时,我们假设yi=y(xi),考虑用yi+1代替y(x i+1)而产生慕囟衔蟛睿康氖俏伺卸吓拉公式和改进的欧拉公式的精确度。设初值问题(41)的准确解为y=y(x),则利用泰勒公式,1.欧拉公式的截断误差 由式(43)知,(411),比较式(410)和(411)得,(412),2.改进的欧拉公式的截断误差 由式(45)知,(413),对(49)式右端的积分采用梯形公式并根据梯形公式的误差可得到,(414),其中(xi,xi+1),比较式(413)和(414)得,(415),因此,所以,改进的欧拉公式的截断误差为O(h3),也即改进的欧拉法为二阶的。可以验证,预估校正公式(47)与改进的欧拉公式的截断误差相同,均为O(h3)。这里略去证明。例 2求解初值问题,解 现分别用欧拉公式和改进的欧拉公式进行计算。这里欧拉公式的具体形式为,其解析解为,表 42,3 龙格库塔法,3.1 泰勒级数展开法 我们还是假设yi=y(xi),利用泰勒级数展开求y(xi+1)。式(410)就是y(xi+1)的泰勒展开式,若取右端前有限项作为y(xi+1)的近似值,就可得到计算y(xi+1)的各种不同截断误差的数值公式。例 如,取前两项可得到,y(xi+1)y(xi)+hy(xi)=y(xi)+hf(xi,y(xi)=yi+hf(xi,yi)若取前三项,可得到截断误差为O(h3)的公式,这里 y(xi)=f(xi,y(xi)y(xi)=fx(xi,y(xi)+fy(xi,y(xi)y(xi)=fx(xi,y(xi)+f(xi,y(xi)fy(xi,y(xi)类似地,若取前k项作为y(xi+1)的近似值,便得到截断误差为O(hk)的数值计算公式。这些公式的计算必须依赖于求y(xi)的k阶导数,除非f(x,y)足够简单,否则直接用泰勒展开法求解较为复杂。但是泰勒级数展开法的基本思想是许多数值方法的基础。,3.2 龙格库塔法 前面已经知道,初值问题(41)等价于,龙格库塔法的基本思想是:用f(x,y)在几个不同点的数值加权平均来代替f(xi+h,y(xi+h)的值,而使截断误差的阶尽可能高。,1.二阶龙格库塔公式 将预估校正公式(48)改写成更一般的形式,(416),适当选取%、1、2%的值,使截断误差y(x i+1)-y i+1的阶数尽可能高。这里仍假定yi=y(xi),显然,2.四阶龙格库塔公式 二阶龙格库塔公式是由使用在两个不同点上的函数值的线性组合而得到的。同样,我们用四个不同点上的函数值的线性组合就可得到四阶龙格库塔公式。设 yi+1=yi+h(1k1+2k2+3k3+4k4)(420)这里k1、k2、k3、k4为四个不同点上的函数值,分别设其为,k1=f(xi,yi)k2=f(xi+1h,yi+11k1h)k3=f(xi+2h,yi+21k1h+22k2h)k4=f(xi+3h,yi+31k1h+32k2h+33k3h)其中1、2、3、4、1、2、3、11、21、22、31、32、33均为待定系数。,类似于前面的讨论,把k2、k3、k4分别在xi点展成h的幂级数,代入线性组合式(420)中,将得到的公式与y(xi+1)在xi点上的泰勒展开式比较,使其两式右端直到h4的系数相等,经过较复杂的运算便可得到关于i,i,ij的一组特解 1=2=11=22=1/2 21=31=32=0 3=33=1 1=4=1/6 2=3=1/3(422),从而得到常用的标准四阶龙格库塔公式:,(423),图 4.5,表 43,4 阿达姆斯方法,我们已经知道,初值问题(41)等价于积分方程(49),即,对积分式分别采用矩形公式和梯形公式可得到欧拉公式和改进的欧拉公式,截断误差分别为O(h2)和O(h3)。为此,我们自然可以想到,若用更高次的插值多项式来代替f(x,y),则所得公式的精度会更高。这就是线性多步法的起源思想。本章前面介绍的方法称为单步法,因为在计算yi+1时,只用到前面yi的值。而对于线性多步法是要利用前面已经算出的若干个值yi-k,yi-1,yi来求yi+1。现用k次多项式Pk(x)来代替f(x,y(x),(424),舍去余项 并设yi=y(xi),而yi+1为y(xi+1)的近似值,于是可得到线性多步法的计算公式,4.1 阿达姆斯(Adams)显式 取q+1个基点xi,xi-1,xi-q,并作牛顿后差插值多项式见式(438),则,其中,将式(427)代入式(426)得,(428),这里,(429),式(428)称为阿达姆斯显式。对于余项,亦即,显然当q=3时,(430),m是多项式积分,易算出结果如下:,例如,为了易于在电子计算机上实现,常将式(428)中的 用各点的已知函数值表示。特别,当q=2时,有,当q=3时,有,(431),(432),4.2 阿达姆斯隐式 类似于4.1,取q+1个基点xi+1,xi,xi-q+1,并作牛顿后差插值多项式,则,(433),其中,将式(433)代入式(426)得,(434),其中,(435),式(434)称为阿达姆斯隐式。类似于阿达姆斯显式余项的求法,可得到阿达姆斯隐式的余项为,(436),例当q=3时,m的计算结果如下:,若将式(434)中各阶差分mfi+1用各点的已知函数值表示,则可得到便于在电子计算机上实现的数值公式。例如,当q=2时,(437),(438),当q=3时,4.3 阿达姆斯预估校正公式 我们常把阿达姆斯显式及隐式联立使用,即构造所谓阿达姆斯预估校正公式。现以q=2为例构造预估校正公式,(439),并取,与同阶的龙格库塔方法相比较,阿达姆斯方法计算量小,公式简单,程序易于实现。但它的主要缺点是不能自动开始,开始的前几个值要依赖于其它方法获得。这里介绍两种计算开始值的方法。(1)用单步法中的数值方法求出开始值。(2)使用y(x)的泰勒展开式,例4 用阿达姆斯方法求初值问题,(440),的数值解。解 首先用泰勒展式求其三个点的值,因为,表 44,设常微分方程组的初值问题为,(441),这里,初值问题(441)与(41)式形式上完全相似。因此,对于(41)适用的数值计算公式,只要将其中的y0,y,f,都改写成相应的向量形式 s,y,f,就能写出求解(441)的数值公式。例如,初值问题(441)的标准四阶龙格库塔公式为,5二阶线性常微分方程边值问题的数值解,设二阶线性常微分方程的边值问题为 y+p(x)y+q(x)y=f(x)y(a)=,y(b)=,axb(442)其中p(x),q(x),f(x)为区间崐a,b上足够光滑的已知函数,且q(x)0,、为已知常数。,在上述条件下,边值问题(442)式存在连续可微的解,且是唯一的。若采用差分方法来解边值问题,其基本步骤是:(1)将区间a,b“离散化”,即给a,b一个分划,此分划常考虑等距;(2)对每一个基点,将各阶导数用差商来近似表示,将微分方程转化为差分方程,进而转化为线性代数方程组;(3)解线性代数方程组,求得各基点上的近似解。,现具体给出求解边值问题(442)的方法步骤。首先将区间a,b进行等距分划,即令 xi=a+ih,i=0,1,2,n 其中,一般称,为边界点,称x1,x2,xn-1为内,其次,在各基点xi上,将y,y用差商来近似表示。这里要求有相同阶数的截断误差,以保证精度协调。我们知道,由(463)式可得到,(443),又对式(458)再求一次导数,注意到,有,令t=1,可得到,取上式右边第一项作为pn(x1)的近似有,由差分与导数的关系可得余项为,所以,有,(444),略去(443)和(444)式的截断误差O(h2),并用yi代替y(xi)可有,(445),(446),将(445)、(446)代入(442)得到近似差分方程为,(447),其中 pi=p(xi),qi=q(xi),fi=f(xi)将式(447)整理后,得,其中,(449),这个方程组的系数矩阵是三对角的,可以利用追赶法求解。根据(445)、(446)式知,对于y(xi)-yi的误差方程只要把fi取成O(h2)即可。现剩下两个问题:其一是线性方程组(448)即差分方程(447)解的存在唯一性;其二是(448)的解的收敛性,也即当h0时,解是否收敛于微分方程(442)的准确解。下面对差分方程(447)给出结论,不加以证明。,定理若ai0,ci0,-biai+ci,i=1,2,n-1,则二阶差分方程 aiyi-1+biyi+ciyi+1=di y0=,yn=,i=1,2,n-1 例5 用差分法解边值问题 y-y=x y(0)=0,y(1)=1,0 x1,h=01,解 这里步长h=1/10,则基点,表 45,