第七章常微分方程初值问题数值解法7.1引言科学技术中常常需要求解常微分方程的定解问题.这类问题最简单的形式,是本章将要着重考察的一阶方程的初值问题'00,yfxyyxy1.11.2我们只要,只要函数,fxy适当光滑—譬如关于y满足利普希茨Lipschitz条件,,fxyfxyLyy.1.3理论上就可以保证初值问题1.1,1.2的解yyx存在并且唯一.虽然求解常微分方程有各种各样的解析方法,但解析方法只能用来求解一些特殊类型的方程,实际问题中归结出来的微分方程主要靠数值解法.所谓数值解法,就是寻求解yx在一系列离散节点121nnxxxx上的近似值121,,,,nnyyyy.相邻两个节点的间距1nnnhxx成为步长.今后如不特别说明,总是假定1,2,ihhi为定数,这时节点为0,0,1,2,.nxxnhn初值问题1.1,1.2的数值解法有个基本特点,它们都采取“步进式”,即求解过程顺着节点排列的次序一步一步地向前推进.描述这类算法,只要给出用已知信息,12,,nnnyyy计算1ny的递推公式.首先,要对方程1.1离散化,建立求数值解的递推公式.一类是计算1ny时只用到前一点的值ny,称为单步法.另一类是用到1ny前面k点的值11,,,nnnkyyy称为k步法.其次,要研究公式的局部截断误差和阶,数值解ny与精确解nyx的误差估计及收敛性,还有递推公式的计算稳定性等问题.7.2简单的数值方法与基本概念7.2.1欧拉法与后退欧拉法我们知道,在xy平面上,微分方程1.1的解yyx称为它的积分曲线.积分曲线上一点,xy的切线斜率等于函数,fxy的值.如果按函数,fxy在xy平面上建立一个方向场,那么,积分曲线上每一点的切线方向均与方向场在该点方向相一致.基于上述几何解释,我们从初始点000,pxy出发,先依方向场在该点的方向推进到1xx上一点1p,然后再从1p依方向场的方向推进到2xx上一点2p,循此前进做出一条折线012ppp(图91).一般地,设已做出该折线的顶点np,过,nnnpxy依方向场的方向再推进到111,nnnpxy,显然两个定点np,1np的坐标有关系11,,_nnnnnnyyfxyxx即1,nnnnyyhfxy2.1这就是著名的欧拉Euler公式.若初值0y已知,则依公式2.1可逐步算出10002111,,,,yyhfxyyyhfxy例1求解初值问题'201xyyyy01x,2.2解为便于进行比较,本章将用多种数值方法求解上述初值问题.这里先用欧拉方法,欧拉公式的具体形式为12.nnnnnxyyhyy取步长0.1,h计算结果见表71表71计算结果对比nxnynyxnxnynyx0.10.20.30.40.51.10001.19181.27741.35821.43511.09541.18321.26491.34161.41420.60.70.80.91.01.50901.58031.64981.71781.78481.48321.54921.61251.67331.7321初值问题2.2有解12yx,按这个解析式子算出的准确值nyx同近似值ny一起列在表71中,两者相比较可以看出欧拉方法的精度很差.还可以通过几何直观来考察欧拉方法的精度.假设nnyyx,即顶点np落在积分曲线yyx上,那么,按欧拉方法做出的切线np1np便是yyx过点np的切线.从图形上看,这样定出顶点1np显著地偏离了原来的积分曲线,可见欧拉方法是相当粗糙的.为了分析计算公式的精度,通常可采用泰勒展开将1nyx在nx处展开,则有1nnyxyxh2''',2nnnhyxyxhy1,.nnnxx在nnyyx的前提下,',,.nnnnnfxyfxyxyx于是可得欧拉法2.1的公式误差22''''1122nnnnhhyxyyyx,2.3称为此方法的局部截断误差.如果对方程1.1从nx到1nx积分,得11,nnnnxyxyxftytdtx.2.4右端积分用左矩形公式,nnhfxyx近似,再以ny代替nyx,1ny代替1nyx也得到2.1,局部截断误差也是2.3.如果在2.4中右端积分用右矩形公式11,nnhfxyx近似,则得另一个式111,nnnnyyhfxyx2.5称为后退得欧拉法.后退的欧拉公式与欧拉公式有着本质的区别,后者是关于1ny的一个直接的计算公式,这类公式称作是显式的;然而公式2.5的右端含有未知的1ny,它实际上是关于1ny的一个函数方程,这类公式称作是隐式的.显式与隐式两类方法各有特点.考虑到数值稳定性等其他因素,人们有时需要选用隐式方法,但使用显式算法远比隐式方便.隐式方程2.5通常用迭代法求解,而迭代过程的实质是逐步显示化.设用欧拉公式01,nnnnyyhfxy给出迭代初值01ny,用它代入2.5式的右端,使之转化为显示,直接计算得10111,nnnnyyhfxy,然后再用11ny代入2.5式,又有21111,nnnnyyhfxy.如此反复进行,得1111,kknnnnyyhfxy0,1,k.2.6由于,fxy对y满足利普希茨Lipschitz条件1.3.由2.6减2.5得1111111,,kknnnnnnyyhfxyfxy11.knnhLyy由此可知,只要1hL迭代法2.6就收敛到解1ny.关于后退欧拉法的公式误差,从积分公式看到它与欧拉法是相似的.7.2.2梯形方法为得到比欧拉法精度高的计算公式,在等式2.4右端积分中若用梯形求积公式近似,若用ny代替nyx,1ny代替1nyx,则得111,,2nnnnnnhyyfxyfxy2.7称为梯形方法.梯形方法是隐式单步法,可用迭代法求解.同后退的欧拉法一样,仍用欧拉方法提供迭代初值,则梯形法的迭代公式为011111,;,,;20,1,2,.nnnnkknnnnnnyyhfxyhyyfxyfxyk2.8为了分析迭代过程的收敛性,将2.7式与2.8式相减,得1111111,,2kknnnnnnhyyfxyfxy,于是有11111,2kknnnnhLyyyy式中L为,fxy关于y的利普希茨常数.如果选取h充分小,使得12hL,则当k时有1kny1ny,这说明迭代过程2.8是收敛的.7.2.3单步法的局部截断误差与阶初值问题1.1,1.2的单步法可用一般形式表示为11,,,,nnnnnyyhxyyh2.9其中多元函数与,fxy有关,当含有1ny时,方法是隐式的,若不含1ny则为显式方法,所以显式单步法可表示为1,,,nnnnyyhxyh2.10,,xyh称为增量函数,例如对欧拉法2.1有,,xyh,fxy.它的局部截断误差已由2.3给出,对一般显式单步法则可如下定义.定义1设yx是初值问题1.1,1.2的准确解,称11,,nnnnnTyxyxhxyxh2.11为显式单步法2.10的局部截断误差.1nT之所以称为局部的,是假设在nx前各步没有误差.当nynyx时,计算一步,则有111,,nnnnnnyxyyxyhxyh11,,nnnnnyxyxhxyxhT.所以,局部截断误差可理解为用方法2.10计算一步的误差,也即公式2.10中用准确解yx代替数值解产生的公式误差.根据定义,显然欧拉法的局部截断误差11,nnnnnTyxyxhxyx'1nnnyxyxhyx2''3,2nhyxh即为2.3的结果.这里2''2nhyx称为局部截断误差主项.显然21nTh.一般情形的定义如下,定义2设yx是初值问题1.1,1.2的准确解,若存在最大整数p使显式单步法2.10的局部截断误差满足11,,pnTyxhyxhxyhh,2.12则称方法2.10具有p阶精度.若将2.12展开式写成121,ppnnnTxyxhh,则1,pnnxyxh称为局部截断误差主项.以上定义对隐式单步法2.9也是适用的.例如,对后退欧拉法2.5其局部截断误差为1111,nnnnnTyxyxhfxyx2'''32nnhhyxyxh'''2nnhyxhyxh2''3.2nhyxh这里1p,是1阶方法,局部截断误差主项为2''2nhyx.同样对梯形法2.7有''1112nnnnnhTyxyxyxyx23''''''23!nnnhhhyxyxyx2'''''''422nnnnhhyxyxhyxyxh3'''4.12nhyxh所以梯形方法2.7是二阶的,其局部误差主项为3'''12nhyx.7.2.4改进的欧拉公式我们看到,梯形方法虽然提高了精度,但其算法复杂,在应用迭代公式2.9进行实际计算时,每迭代一次,都要重新计算函数,fxy的值,而迭代又要反复进行若干次,计算量很大,而且往往难以预测.为了控制计算量,通常只迭代一两次就转入下一步的计算,这就简化了算法.具体地说,我们先用欧拉公式求得一个初步的近似值1ny,称之为预测值,预测值1ny的精度可能很差,再用梯形公式2.7将它校正一次,即按2.8式迭代一次得1ny,这个结果称校正值,而这样建立的预测-校正系统通常称为改进的欧拉公式:预测1ny,,nnnyhfxy校正1ny11,,.2nnnnnhyfxyfxy2.13或表为下列平均化形式11,,,,1.2pnnncnnpnpcyyhfxyyyhfxyyyy例2用改进的欧拉方法求解初值问题2.2.解改进的欧拉公式为112,2,1.2npnnnncnppnpcxyyhfyyxyyhfyyyyy仍取0.1h,计算结果见表92.同例1中欧拉法的计算结果比较,改进欧拉法明显改善了精度.表72计算结果对比nxnynyxnxnynyx0.10.20.30.40.51.09591.18411.26621.34241.41641.09541.18321.26491.34161.41420.60.70.80.91.01.48601.55251.61531.67821.73791.48321.54921.61651.67331.73217.3龙格-库塔方法7.3.1显式龙格-库塔法的一般形式上