1、几种常见的数值积分方法,欧拉法梯形法龙格库塔法线性多步法变步长法,有关概念 单步法与多步法 只由前一时刻的 ,就可求得后一时刻的数值 ,称为单步法,它是一种能自动启动的算法。反之,计算需要用到过去 时刻的y数值,则称为多步法。由于多步法计算 需要 时刻y的数值,启动时必须使用其他方法计算获得这些值,所以它不是自启动的算法。 显式和隐式 计算 时所用数值均已算出来,或者说,在递推公式中只用到 及其之前的若干时刻的值,而不用 以及其后时刻的数值,则称为显式公式,例如欧拉法、龙格库塔法的情况。反之,如果计算 的递推公式中用含有未知量 的递推公式,则称为隐式公式,例如梯形法、预估校正法的情况。使用隐式
2、公式时,需要借助于一个显式公式估计一个初值,然后再用隐式公式进行迭代运算,此为预估校正法。显然这种方法也不是自启动的算法。由此可见,单步法和显式在实现上比多步法和隐式来得方便,但是出于精度的要求,特别是出于稳定性要求,则应当采用隐式公式。,欧拉法,欧拉法(Euler)是最简单的一种数值积分法。虽然它的计算精度较低,实际中很少采用,但推导简单,能说明构造数值解法一般计算公式的基本思想。已知一阶微分方程,式两端由 到 进行积分,可得,积分项是曲线 及 包围的面积,当步长 足够小时可以用矩形面积来近似,即,令 的近似值为 ,则有,把 作为初始点, 作为初始值重复上述做法,可以得到 ,进而得到递推公式
3、,即:,上式称为欧拉公式,或称为矩形法。若已知初值,就可以经过上式的迭代计算求得近似值。,梯形法,基于欧拉思想的近似思想,我们现用梯形的面积来代替前面的矩形面积,可以得到梯形公式,其中,,显然,上式是隐式的,故梯形法不能自启动。因此通常可以使用欧拉法启动求出初值,算出 的近似值 ,然后将其代回原微分方程,计算 的近似值 ,再利用梯形公式求修正后的 ,为了提高精度可以利用梯形公式反复迭代。若只迭代一次,可以得到改进的欧拉公式,上式的第一式称为预估公式,第二式称为校正公式,这类方法称为预估校正法,也成为改进的欧拉法。梯度法又称二阶龙格库塔法。,定积分几何意义,曲边小梯形的面积可以由直边小梯形的面积
4、来近似,整个曲边梯形的面积:,龙格库塔法,将泰勒展开式多取几项后截断,能提高截断误差的阶次,即可提高精度。但直接采用泰勒展开方法计算函数的高阶导数,运用起来很不方便。德国数学家龙格和库塔两人先后提出间接利用泰勒展开式的方法,即用几个点上函数 的一阶导函数值的线性组合起来近似代替 在某点的各阶导数,然后用泰勒展开式确定线性组合中的各加权系数。这样既可避免计算高阶导数,又可提高数值积分的精度,这就是龙格-库塔法(以下简称是即 法)的基本思想。,考虑一阶微分方程将 展开成泰勒级数,为了避免计算各阶导数和偏导数,将上式写成,其中,r 称为阶数; 为待定系数, 由下式决定:且定义,下面针对r 的取值进行
5、如下讨论(1) ,此时 , , 式上即变形为 取 即得一阶 公式,它就是前面介绍的欧拉公式,故可以说欧拉公式是 公式的特例。,(2) r=2 ,我们可以知道: 将 在 点 展开成泰勒级数,带入合并整理,对应系数相等比较可得,上式是一个不定方程,它有无穷多个解。取 可得,显然上式正好是前面介绍的改进的欧拉公式。,取 ,可得,线性多步法,前面讲述的欧拉法、梯形法和龙格库塔法都是一种单步、显式计算法。在计算 时刻的值时,只要利用前一步的值,就可以自动进行计算。在逐步推进计算中,计算 之前,已经知道n点以前一些时刻的近似值 及 等。如果能够充分利用前面多步的信息来计算 ,则可以既加快仿真速度,又获得较
6、高的精度,这就是构造多步法的基本思想。在线性多步法中,使用最为普通和最具代表性的方法是亚当姆斯。,线性多步法的递推计算公式可记为:,式中 , 均为待定系数。如果 ,且上式的右端不含有 ,公式称为显式。如果 上式的右端含有 ,称为隐式公式。,由于隐式的稳定域大于显式公式的,而且对同价的亚当姆斯法来说,隐式公式的精度往往高于显式公式,所以一般采用折中的方法,即常用的 亚当斯法是将显式和隐式结合使用,即先由显式公式求出 的预估计算值 ,再代入隐式公式求出 的值,即预估-校正法,下面是预估-校正公式:,变步长法,上述方法通常在仿真前要选择积分步长,一般假设步长是固定的。 在仿真运行过程中也可以动态调整
7、积分步长。但要动态调整步长需要在仿真过程中才能估计积分误差,同时对积分步长的调整能使误差保持在规定的范围内。采用这种方法的积分算法称为变步长算法。 在多数情况下,假设具有同样的积分误差,变步长仿真的时间小于固定步长的仿真时间。变步长法不适用于实时仿真。这里主要对单步长法的误差估计和步长控制作介绍,至于多步法,由于其不能自启动,故一般不作变步长处理,但若改成但不多值法,则可实现变步长。,下面举变步长龙格-库塔-默森(法为例来说明变步长法的应用。,对于龙格-库塔算法的误差估计,通常是设法找到另一个低阶(一般是低一阶)的龙格-库塔公式,要求这两个公式中的 相同,则这两个公式计算结果之差可以看作是误差
8、。设微分方程为:,计算公式为:,其中:,上式为四阶五级公式,还可以继续推导出一个三阶四级公式,令误差 ,则可得,根据该步的绝对误差 即可按步长的控制策略进行步长的控制,例 1. 用欧拉法求解初值问题,在0,1上的数值解,取 并与精确解 进行比较。,解:将题中所给的 代入欧拉公式得,递推计算结果见下表:,例 2. 用梯形公式,欧拉预估-校正公式求解初值问题,在0,1上的数值解,取 并与精确解 比较,解:将题中所给的 代入梯形公式得,若在上式中取s=0 就得欧拉预估-校正公式。计算结果见下表,据此,用二阶,四阶泰勒方法计算结果见表,从表1和表2可以看出,梯形法和欧拉预估-校正法确实比欧拉法精确,表1中欧拉法的结果只有两位有效数字,而表2中除了欧拉预估-校正法的 外,其余数值均有三位有效数字。,例 3. 取h=0.1 ,用二阶和四阶泰勒方法求解初值问题(龙哥库塔法),解:直接求导,有,由表可以看出,四阶泰勒方法可以获得相当满意的结果。但需要指出的是,泰勒方法在实际计算时往往是相当困难的,因为它需要计算 的高阶导数值 。当 比较复杂时, 的高阶导数也会很复杂。因此泰勒方法很少单独使用,但用它可以启发思路。,