(NumericalMethodsforOrdinaryDifferentialEquations)常微分方程分为(1)初值问题(2)边值问题一、初值问题的数值解法§1引言一阶常微分方程初值问题的一般形式是:0(,),(1)(){(,),()()}yfxyaxbyayDxyaxbyxyyx称在区域D上对满足Lipschitz条件是指:1212120..(,)(,),[,],,[(),()]LstfxyfxyLyyxabyyyxyx(,)fxyy二、初值问题解的存在性考虑一阶常微分方程的初值问题/*Initial-ValueProblem*/:0)(],[),(yaybaxyxfdxdy|||),(),(|2121yyLyxfyxf则上述IVP存在唯一解。只要在上连续,且关于y满足Lipschitz条件,(,)fxy1,abR即存在与无关的常数L使,xy对任意定义在上的都成立,,ab12,yxyx要计算出解函数y(x)在一系列节点a=x0x1…xn=b处的近似值采用离散化方法。()(1,...,)iiyyxin称节点间距为步长,通常采用等距节点,即取hi=h(常数)。)1,...,0(1nixxhiii三、初值问题的离散化方法离散化方法的基本特点是依照某一递推公式,值,取。按节点从左至右的顺序依次求出的近似()iyx(1,...,)iyin0y如果计算,只用到前一步的值,则称这类方法为单步方法。1iyiy如果计算需用到前r步的值,,则称这类方法为r步方法。1iy11,,iiryyiy§2欧拉方法/*Euler’sMethod*/欧拉公式(单步显示公式):向前差商近似导数hxyxyxy)()()(010),()()()(000001yxfhyxyhxyxy1y记为x0x1)1,...,0(),(1niyxfhyyiiii亦称为欧拉折线法/*Euler’spolygonalarcmethod*/在假设yi=y(xi),即第i步计算是精确的前提下,考虑的截断误差Ri=y(xi+1)yi+1称为局部截断误差/*localtruncationerror*/。定义若某算法的局部截断误差为O(hp+1),则称该算法有p阶精度。定义欧拉法的局部截断误差:)],([)]()()()([)(32112iiiihiiiiiyxhfyhOxyxyhxyyxyR)()(322hOxyihRi的主项/*leadingterm*/欧拉法具有1阶精度。例1:用欧拉公式求解初值问题2201.201yxyxy()取步长。0.1h解:应用Euler公式于题给初值问题的具体形式为:2120,1,...,1101iiiiyyhxyiy其中。0.1ixi计算结果列于下表:iixiyiyxiiyxy1234567891011120.10.20.30.40.50.60.70.80.91.01.11.21.0000000.9800000.9415840.8883890.8252500.7571470.6883540.6220180.5601130.5036420.4529110.4077830.9900990.9615380.9174310.8630690.8000000.7352940.6711410.6097560.5524860.5000000.4524890.4098360.0099010.0184620.0241530.0263200.0252500.0218520.0172130.0122620.0076260.0036420.0004220.002053可用来检验近似解的准确程度。进行计算,数值解已达到了一定的精度。这个初值问题的准确解为,211yxx从上表最后一列,我们看到取步长0.1h欧拉公式的改进:隐式欧拉法/*implicitEulermethod*/向后差商近似导数hxyxyxy)()()(011x0x1))(,()(1101xyxfhyxy由于未知数yi+1同时出现在等式的两边,不能直接得到,故称为隐式/*implicit*/欧拉公式,而前者称为显式/*explicit*/欧拉公式。111,0,1iiiiyhfxiyyn一般先用显式计算一个初值,再迭代求解。隐式欧拉法的局部截断误差:11)(iiiyxyR)()(322hOxyih即隐式欧拉公式具有1阶精度。梯形公式/*trapezoidformula*/—显、隐式两种算法的平均)1,...,0()],(),([2111niyxfyxfhyyiiiiii注:的确有局部截断误差,311iiiRyxyOh即梯形公式具有2阶精度,比欧拉方法有了进步。但注意到该公式是隐式公式,计算时不得不用到迭代法,其迭代收敛性与欧拉公式相似。中点欧拉公式/*midpointformula*/中心差商近似导数hxyxyxy2)()()(021x0x2x1))(,(2)()(1102xyxfhxyxy1,...,1),(211niyxfhyyiiii假设,则可以导出即中点公式具有2阶精度。)(),(11iiiixyyxyy)()(311hOyxyRiii方法显式欧拉隐式欧拉梯形公式中点公式简单精度低稳定性最好精度低,计算量大精度提高计算量大精度提高,显式多一个初值,可能影响精度Can’tyougivemeaformulawithalltheadvantagesyetwithoutanyofthedisadvantages?Doyouthinkitpossible?Well,callmegreedy…OK,let’smakeitpossible.改进欧拉法/*modifiedEuler’smethod*/Step1:先用显式欧拉公式作预测,算出Step2:再将代入隐式梯形公式的右边作校正,得到1iy)1,...,0(),(,),(211niyxfhyxfyxfhyyiiiiiiii1,iiiiyyhfxy111,,2iiiiiiyyyyhfxfx注:此法亦称为预测-校正法/*predictor-correctormethod*/可以证明该算法具有2阶精度,同时可以看到它是个单步递推格式,比隐式公式的迭代求解过程简单。后面将看到,它的稳定性高于显式欧拉法。改进的欧拉法),(),(2111nnnnnnyxfyxfhyy在实际计算时,可将欧拉法与梯形法则相结合,计算公式为,...2,1,0),(),(2),()(11)1(1)0(1kyxfyxfhyyyxhfyyknnnnnknnnnn应用改进欧拉法,如果序列收敛,,,)1(1)0(1nnyy它的极限便满足方程),(),(2111nnnnnnyxfyxfhyy改进欧拉法的截断误差)(0)(311hyxynn因此,改进欧拉法公式具有2阶精度例2:用改进Euler公式求解例1中的初值问题,取步长。0.1h解:对此初值问题采用改进Euler公式,其具体形式为0212111111122()0,1,...,1112piiiicpiiiipciiiyyyhxyyyhxyiyyy计算结果列于下表:iixiy1piy1ciyiiyxy改进的Euler法iiyxyEuler法01234567891011120.00.10.20.30.40.50.60.70.80.91.01.11.21.0000000.9900000.9613660.9172460.8619540.8000340.7355270.6175870.6103990.5532890.5009190.4534790.4108591.0000000.9703890.9243970.8667650.8025170.7360290.6706070.6084430.5507850.4981860.4507350.4082370.9800000.9523330.9100950.8571430.7975510.7350250.6725670.6123550.5557930.5036510.4562230.4134810.0000000.0000990.0001730.0001850.0001150.0000340.0002330.0004460.0006430.0008030.0009190.0009900.0010230.0000000.0099010.0184620.0241530.0263200.0252500.0218520.0172130.0122620.0076260.0036420.0004220.002053通过计算结果得比较可以看出,改进的Euler方法的计算精度比Euler方法要高。§3龙格-库塔法/*Runge-KuttaMethod*/建立高精度的单步递推格式。单步递推法的基本思想是从(xi,yi)点出发,欧拉法及其各种变形所能达到的最高精度为2阶。以某一斜率沿直线达到点。11,iixy考察改进的欧拉法,可以将其改写为:),(),(2121121211hKyhxfKyxfKKKhyyiiiiii斜率一定取K1K2的平均值吗?步长一定是一个h吗?将改进欧拉法推广为:),(),(][12122111phKyphxfKyxfKKKhyyiiiiiill首先希望能确定系数l1、l2、p,使得到的算法格式有2阶精度,即在的前提假设下,使得)(iixyy)()(311hOyxyRiiiStep1:将K2在(xi,yi)点作Taylor展开)(),(),(),(),(2112hOyxfphKyxphfyxfphKyphxfKiiyiixiiii)()()(2hOxyphxyii),(),(),(),(),(),()(yxfyxfyxfdxdyyxfyxfyxfdxdxyyxyxStep2:将K2代入第1式,得到)()()()()]()()([)(322212211hOxyphxyhyhOxyphxyxyhyyiiiiiiiilllllStep3:将yi+1与y(xi+1)在xi点的泰勒展开作比较)()(2)()()(321hOxyhxyhxyxyiiii)()()()(322211hOxyphxyhyyiiiilll要求,则必须有:)()(311hOyxyRiii21,1221plll这里有个未知数,个方程。32存在无穷多个解。所有满足上式的格式统称为2阶龙格-库塔格式。注意到,就是改进的欧拉法。21,121llp为获得更高的精度,应该如何进一步推广?)...,(......),(),(),(]...[1122112321313312122122111mmmmmmimiiiiiimmiihKhKhKyhxfKhKhKyhxfKhKyhxfKyxfKKKKhyybbbabbaballl其中li(i=1,…,m),ai(i=2,…,m)和bij(i=2,…,m;j=1,…,i1)均为待定系数,确定这些系数的步骤与前面相似。考虑一阶常微分方程初值问题0(,),,(),yfxyaxbyay11()()(,())()(