1、引言 包含自变量、未知函数及未知函数的导数或微分的方程称为微分方程。在微分方程中, 自变量的个数只有一个, 称为常微分方程。自变量的个数为两个或两个以上的微分方程叫偏微分方程。微分方程中出现的未知函数最高阶导数的阶数称为微分方程的阶数。如果未知函数y及其各阶导数都是一次的,则称它是线性的,否则称为非线性的。,第三章 常微分方程的差分方法,在高等数学中,对于常微分方程的求解,给出了一些典型方程求解析解的基本方法,如可分离变量法、常系数齐次线性方程的解法、常系数非齐次线性方程的解法等。但能求解的常微分方程仍然是有限的,大多数的常微分方程是不可能给出解析解。 譬如,这个一阶微分方程就不能用初等函数及
2、其积分来表达它的解。,从实际问题当中归纳出来的微分方程,通常主要依靠数值解法来解决。本章主要讨论一阶常微分方程初值问题,( 3.1 ),在区间a x b上的数值解法。,可以证明,如果函数在带形区域 R=axb,-y内连续,且关于y满足李普希兹(Lipschitz)条件,即存在常数L(它与x,y无关)使,对R内任意两个 都成立,则方程( 3.1 )的解在a, b上存在且唯一。,7.2 数值方法的基本思想 对常微分方程初值问题(7.1)式的数值解法,就是要算出精确解y(x)在区间a,b上的一系列离散节点 处的函数值 的近似值 相邻两个节点的间距 称为步长,步长可以相等,也可以不等。本章总是假定h为
3、定数,称为定步长,这时节点可表示为数值解法需要把连续性的问题加以离散化,从而求出离散节点的数值解。,对于初值问题的数值解法,首先要解决的问题就是如何对微分方程进行离散化,建立求数值解的递推公式。递推公式通常有两类,一类是计算yi+1时只用到xi+1, xi 和yi,即前一步的值,因此有了初值以后就可以逐步往下计算,此类方法称为单步法;其代表是龙格库塔法。另一类是计算yi+1时,除用到xi+1,xi和yi以外,还要用到 ,即前面k步的值,此类方法称为多步法;其代表是亚当斯法。,3.1 欧拉(Euler)法3.1.1 Euler公式 欧拉(Euler)方法是解初值问题的最简单的数值方法。初值问题的
4、解y=y(x)代表通过点 的一条称之为微分方程的积分曲线。积分曲线上每一点 的切线的斜率 等于函数 在这点的值。,Euler法的求解过程是:从初始点P0(即点(x0,y0)出发,作积分曲线y=y(x)在P0点上切线 (其斜率为 ),与x=x1直线,相交于P1点(即点(x1,y1),得到y1作为y(x1)的近似值,如上图所示。过点(x0,y0),以f(x0,y0)为斜率的切线方程为 当 时,得,这样就获得了P1点的坐标。,同样, 过点P1(x1,y1),作积分曲线y=y(x)的切线交直线x=x2于P2点,切线 的斜率 =直线方程为,当 时,得,当 时,得,由此获得了P2的坐标。重复以上过程,就可
5、获得一系列的点:P1,P1,Pn。对已求得点以 = 为斜率作直线,取,从图形上看,就获得了一条近似于曲线y=y(x)的折线 。,这样,从x0 逐个算出对应的数值解,通常取 (常数),则Euler法的计算格式,i=0,1,n ( 3.2 ),还可用数值微分、数值积分法和泰勒展开法推导Euler格式。以数值积分为例进行推导。将方程 的两端在区间 上积分得,,选择不同的计算方法计算上式的积分项 ,就会得到不同的计算公式。,(3.3),用左矩形方法计算积分项,代入(3.3)式,并用yi近似代替式中y(xi)即可得到向前欧拉(Euler)公式,由于数值积分的矩形方法精度很低,所以欧拉(Euler)公式当
6、然很粗糙。,例3.1 用欧拉法解初值问题,取步长h=0.2 ,计算过程保留4位小数,解: h=0.2, 欧拉迭代格式,当 k=0, x1=0.2时,已知x0=0,y0=1,有 y(0.2)y1=0.21(401)0.8当 k=1, x2=0.4时,已知x1 =0.2, y1 =0.8,有 y(0.4) y2 =0.20.8(40.20.8)0.6144当 k=2, x3 =0.6时,已知x2 =0.4, y2 =0.6144,有 y(0.6) y3=0.20.6144(4-0.40.6144)=0.4613,3.1.2 梯形公式为了提高精度,对方程 的两端在区间上积分得,改用梯形方法计算其积分
7、项,即,( 3.4 ),代入(3.4)式,并用近似代替式中即可得到梯形公式,( 3.5 ),由于数值积分的梯形公式比矩形公式的精度高,因此梯形公式(3.5)比欧拉公式( 3.2 )的精度高一个数值方法。,( 3.5 ),(3.5)式的右端含有未知的yi+1,它是一个关于yi+1的函数方程,这类数值方法称为隐式方法。相反地,欧拉法是关于yi+1的一个直接的计算公式, 这类数值方法称为显式方法。,3.1.3 两步欧拉公式 对方程 的两端在区间上 积分得,( 3.6 ),改用中矩形公式计算其积分项,即,代入上式,并用yi近似代替式中y(xi)即可得到两步欧拉公式,( 3.7 ),前面介绍过的数值方法
8、,无论是欧拉方法,还是梯形方法,它们都是单步法,其特点是在计算yi+1时只用到前一步的信息yi;可是公式(3.7)中除了yi外,还用到更前一步的信息yi-1,即调用了前两步的信息,故称其为两步欧拉公式。,3.1.4 欧拉法的局部截断误差 衡量求解公式好坏的一个主要标准是求解公式的精度, 因此引入局部截断误差和阶数的概念。 定义3.1 在yi准确的前提下, 即 时, 用数值方法计算yi+1的误差 , 称为该数值方法计算时yi+1的局部截断误差。 对于欧拉公式,假定 ,则有,而将真解y(x)在xi处按二阶泰勒展开:,因此有,定义3.2 数值方法的局部截断误差为 ,则称这种数值方法的阶数是P。步长(
9、h N 结束。,(2)改进欧拉法的流程图,例3.2 用改进欧拉法解初值问题,区间为0,1,取步长h=0.1。,解: 改进欧拉法的具体形式,本题的精确解为 ,计算请对比P98列表所示。,例3.3 对初值问题,证明用梯形公式求得的近似解为,证明: 解初值问题的梯形公式为,整理成显式,反复迭代,得到,3.2 龙格-库塔(Runge-Kutta)法3.2.1 龙格-库塔(Runge-Kutta)法的基本思想 Euler公式可改写成,则yi+1的表达式y(xi+1)与的Taylor展开式的前两项完全相同,即局部截断误差为 。 改进的Euler公式又可改写成,上述两组公式在形式上有一个共同点:都是用f(x
10、,y)在某些点上值的线性组合得出y(xi+1)的近似值yi+1,而且增加计算的次数f(x,y)的次数,可提高截断误差的阶。如欧拉公式:每步计算一次f(x,y)的值,为一阶方法。改进欧拉公式需计算两次f(x,y)的值,它是二阶方法。它的局部截断误差为 。,于是可考虑用函数f(x,y)在若干点上的函数值的线性组合来构造近似公式,构造时要求近似公式在(xi,yi)处的Taylor展开式与解y(x)在xi处的Taylor展开式的前面几项重合,从而使近似公式达到所需要的阶数。既避免求偏导,又提高了计算方法精度的阶数。或者说,在 这一步内多预报几个点的斜率值,然后将其加权平均作为平均斜率,则可构造出更高精
11、度的计算格式,这就是龙格库塔(Runge-Kutta)法的基本思想。,3.2.2 二阶龙格库塔法 在 上取两点xi和 ,以该两点处的斜率值k1和k2的加权平均(或称为线性组合)来求取平均斜率k*的近似值K,即,式中:k1为xi点处的切线斜率值, k2为 点处的切线斜率值,比照改进的欧拉法,将 视为 ,即可得,对常微分方程初值问题(3.1)式的解 y=y(x),根据微分中值定理,存在点 ,使得,式中,K可看作是y=y(x)在区间 上的平均斜率。所以可得计算公式为:,(3.14),将y(xi)在x=xi处进行二阶Taylor展开:,(3.15),也即,(3.13),将 在x=xi处进行一阶Tayl
12、or展开:,将以上结果代入(3.14)得:,(3.16),对式(3.15)和(3.16)进行比较系数后可知,只要,(3.17),成立,格式(3.14)的局部截断误差就等于,有2阶精度,式(3.17)中具有三个未知量,但只有两个方程,因而有无穷多解。若取 ,则p=1,这是无穷多解中的一个解,将以上所解的值代入式(3.14)并改写可得,不难发现,上面的格式就是改进的欧拉格式。凡满足条件式(3.17)有一簇形如上式的计算格式,这些格式统称为二阶龙格库塔格式。因此改进的欧拉格式是众多的二阶龙格库塔法中的一种特殊格式。,若取 ,则 ,此时二阶龙格-库塔法的计算公式为,此计算公式称为变形的二阶龙格库塔法。
13、式中 为区间 的中点。,3.2.3 三阶龙格-库塔法,为了进一步提高精度,设除 外再增加一点,并用三个点 , , 的斜率k1,k2,k3加权平均得出平均斜率k*的近似值,这时计算格式具有形式:,(3.18),为了预报点 的斜率值k3,在区间 内有两个斜率值k1和k2可以用,可将k1,k2加权平均得出 上的平均斜率,从而得到 的预报值,于是可得,运用Taylor展开方法选择参数 ,可以使格式(3.18)的局部截断误差为 ,即具有三阶精度,这类格式统称为三阶龙格库塔方法。下列是其中的一种,称为库塔(Kutta)公式。,(3.19),3.2.4 四阶龙格库塔法,如果需要再提高精度,用类似上述的处理方
14、法,只需在区间 上用四个点处的斜率加权平均作为平均斜率k*的近似值,构成一系列四阶龙格库塔公式。具有四阶精度,即局部截断误差是 。 由于推导复杂,这里从略,只介绍最常用的一种四阶经典龙格库塔公式。,(3.20),3.2.5 四阶龙格库塔法算法实现(1)计算步骤 输入 ,h,N ; 使用龙格库塔公式(3.20)计算出y1; 输出 ,并使 转到 直至n N 结束。,(2) 四阶龙格库塔算法流程图,例7.4 取步长h=0.2,用经典格式求解初值问题,解: 由四阶龙格-库塔公式可得,可同样进行其余yi的计算。本例方程的解为,数值解yi与准确解y(xi)的对比同学们可以自行进行,可看出所求的数值解具有4
15、位有效数字。,龙格库塔方法的推导基于Taylor展开方法,因而它要求所求的解具有较好的光滑性。如果解的光滑性差,那么,使用四阶龙格库塔方法求得的数值解,其精度可能反而不如改进的欧拉方法。在实际计算时,应当针对问题的具体特点选择合适的算法。,本章小结,本章介绍了常微分方程初值问题的基本数值解法。主要有欧拉法、改进欧拉法和龙格库塔方法。它们都是基于把一个连续的定解问题离散化为一个差分方程来求解,是一种步进式的方法。 实际应用时,选择合适的算法有一定的难度,既要考虑算法的简易性和计算量,又要考虑截断误差和收敛性、稳定性。,龙格-库塔法较为常用,适用于多步方法中作初值计算和函数f(x,y)较为简单的场合。四阶标准龙格库塔法精度高,程序简单,易于改变步长,比较稳定,也是一个常用的方法,但计算量较大。当函数f(x,y)较为复杂,可用显式亚当姆斯方法或亚当姆斯预测校正方法,不仅计算量较小,稳定性也比较好,但不易改变步长。 一般采用龙格库塔法提供初值y1, y2, y3,然后用亚当姆斯外推公式求得预测值 ,再由亚当姆斯内插值求得校正值yi+1,如此求得的值近似程度好且节省计算量,是一种较好的方法。,作业习题三 3. 2、3.11、3.12,