复化积分

数值积分

张瑞
中国科学技术大学数学科学学院

复化积分

由于Runge现象,在节点很多的时候,我们也只能使用分段的方法来处理积分。

这种积分称为复化积分(Composite Quadrature Formulas)。

复化梯形公式

把积分区间分为多个小区间,在每个区间$[x_i,x_{i+1}]$上使用梯形公式,再将所有小区间上的数值积分值累加起来。 这样得到的公式称为复化梯形公式

等距节点条件下,取$h=\frac{b-a}n$,

\[x_i=a+ih, \quad i=0,1,\cdots,n \]

则在小区间$[x_i, x_{i+1}]$上,有梯形积分

\[\int_{x_i}^{x_{i+1}}f(x)dx=\frac{h}2(f(x_i)+f(x_{i+1}))-\frac{h^3}{12}f''(\xi_i) \]

将所有区间的积分叠加

\[\begin{aligned} I(f)&=\int_a^bf(x)dx=\sum_{i=0}^{n-1}\int_{x_i}^{x_{i+1}}f(x)dx \\ &=\sum_{i=0}^{n-1}\frac{h}2(f(x_i)+f(x_{i+1}))-\sum_{i=0}^{n-1}\frac{h^3}{12}f''(\xi_i) \\ &=h\left(\frac12f(a)+\sum_{i=1}^{n-1}f(x_i)+\frac12f(b)\right)-\sum_{i=0}^{n-1}\frac{h^3}{12}f''(\xi_i) \end{aligned} \]

这样,可以得到等距节点下的复化梯形公式

\[T_n(f)=h\left(\frac12f(a)+\sum_{i=1}^{n-1}f(x_i)+\frac12f(b)\right) \]

$f\in C^2[a,b]$,公式的误差为

\[R=-\sum_{i=0}^{n-1}\frac{h^3}{12}f''(\xi_i)=-n\frac{h^3}{12}f''(\xi) =-h^2\frac{(b-a)}{12}f''(\xi) \]

. 可以看到,复化梯形公式是收敛的。即$\displaystyle\lim_{h\to0}R=0$

. 节点不等距时,同样可以做复化积分。

例 1. 函数$f(x)=\frac4{1+x^2}$在一些节点处的函数值如表

$x_i$ 0 0.1 0.2 0.4 0.6 0.8 1
$f(x_i)$ 4 3.96 3.846 3.448 2.94 2.439 2

. 注意到数据中,节点的距离是不同的。 在每个区间上使用梯形积分公式, 并且相加。

\[\begin{aligned} I=&\frac{0.1}2(f(0)+f(0.1))+\frac{0.1}2(f(0.1)+f(0.2)) \\ &+\frac{0.2}2(f(0.2)+f(0.4))+\frac{0.2}2(f(0.4)+f(0.6)) \\ &+\frac{0.2}2(f(0.6)+f(0.8))+\frac{0.2}2(f(0.8)+f(1)) \end{aligned} \]
3.1386580254636933

复化Simpson积分

类似地,每2个区间使用Simpson积分,可以得到复化Simpson积分公式。

$h=\frac{b-a}n$,其中$n=2m$为偶数,取等距节点。 在区间$[x_{2i},x_{2i+2}]$中使用Simpson积分公式

\[\begin{aligned} \int_{x_{2i}}^{x_{2i+2}}f(x)dx=&\frac{2h}6(f(x_{2i})+4f(x_{2i+1})+f(x_{2i+2})) \\ &-\frac{(2h)^5}{2880}f^{(4)}(\xi_i) \end{aligned} \]

将所有区间的积分叠加

\[\begin{aligned} \int_a^bf(x)dx=&\sum_{i=0}^m\int_{x_{2i}}^{x_{2i+2}}f(x)dx \\ =&\sum_{i=0}^m\frac{2h}6(f(x_{2i})+4f(x_{2i+1})+f(x_{2i+2}))\\ &-\sum_{i=0}^m\frac{(2h)^5}{2880}f^{(4)}(\xi_i) \end{aligned} \]

可以得到等距节点下的复化Simpson公式

\[S_m(f)=\frac{h}3\left(f(a)+4\sum_{i=0}^{m-1}f(x_{2i+1})+2\sum_{i=1}^{m-1}f(x_{2i})+f(b)\right) \]

$f\in C^4[a,b]$时,误差为

\[\begin{aligned} R&=-\sum_{i=0}^m\frac{(2h)^5}{2880}f^{(4)}(\xi_i)=-m\frac{(2h)^5}{2880}f^{(4)}(\xi) \\ &=-{\color{red}{h^4}}\frac{b-a}{180}f^{(4)}(\xi) \end{aligned} \]

定义 1.
若一个积分公式的误差满足

\[\lim_{h\to0}\frac{R}{h^p}=C, C\neq 0 \]

则称该公式是p阶收敛的。

例 2. 函数$f(x)=\frac4{1+x^2}$在一些节点处的函数值如表

$x_i$ 0 0.1 0.2 0.4 0.6 0.8 1
$f(x_i)$ 4 3.96 3.846 3.448 2.94 2.439 2

. 注意到数据中,节点的距离是不同的。 在每2个区间上使用Simpson积分公式, 并且相加。

\[\begin{aligned} I=&\frac{0.2}6(f(0)+4f(0.1)+f(0.2)) \\ &+\frac{0.4}6(f(0.2)+4f(0.4)+f(0.6)) \\ &+\frac{0.4}6(f(0.6)+4f(0.8)+f(1)) \end{aligned} \]
3.1414384532577757

例 3. 计算$\pi=\int_0^1\frac{4}{1+x^2}dx$

. 区间$[0,1]$等分为8个,有节点$x_k=\frac{k}8$

复化梯形公式

\[T_8(f)=\frac18\left(\frac12f(0)+\sum_{k=1}^7f(x_k)+\frac12f(1)\right)=3.1{\color{red}{38988494}} \]

复化Simpson公式

\[\begin{aligned} S_4(f)&=\frac18\frac13\left(f(0)+4\sum_{odd}f(x_k)+2\sum_{even}f(x_k)+f(1)\right) \\ &=3.141592{\color{red}{502}} \end{aligned} \]

复化梯形公式计算结果如下

n Result Error Order
8 3.1389884944910893 0.0026041590987038177 3.999825896483118
16 3.140941612041389 0.0006510415484042298 3.9999891022114964
32 3.1414298931749745 0.00016276041481866343 3.9999993188121077
64 3.1415519634856555 4.069010413765284e-05 3.999999957435648
128 3.141582481063752 1.0172526041074548e-05 3.9999999973806553
256 3.141590110458283 2.543131510268637e-06 4.0
512 3.141592017806916 6.357828770120477e-07 4.00000000349246

复化Simpson公式计算结果如下

n Result Error Order
8 3.141592502458707 1.5113108631226169e-07 158.97549206717156
16 3.1415926512248222 2.3649708857931273e-09 63.903994429757084
32 3.1415926535528365 3.695665995451236e-11 63.993090520193704
64 3.141592653589216 5.773159728050814e-13 64.01461538461538
128 3.1415926535897842 8.881784197001252e-15 65.0

程序作业-复化积分

  1. 分别编写用复化Simpson积分公式和复化梯形积分公式计算积分的通用程序
  2. 用如上程序计算积分
    \[I(f)=\int_1^5\sin(x)dx \]
    取等距节点$x_i=1+i\times\frac{4}{2^N}$$N$$1,2,\cdots,12$
  3. 计算误差,同时给出误差阶

输出结果:

复化梯形公式
N=1, 误差 0.0008560379230928561
N=2,误差 0.00021390241995433712  阶:  2.0020020
...

复化Simpson公式
N=1, 误差 -2.2921544006182515e-06
N=2,误差 -1.4274775839151488e-07 阶:  4.0572407
...

问题. 如何给出数值计算结果的误差阶?

若公式的误差表达式为$E=O(h^p)$,则步长为$h$时,误差为

\[E_1=C_1h^p \]

步长为$\frac{h}2$时,误差为

\[E_2=C_2\left(\frac{h}2\right)^p \]

近似地认为$C_1\approx C_2$,则有$\frac{E_1}{E_2} \approx 2^p$

因此,误差阶

\[p\approx \frac{\ln(|\frac{E_1}{E_2}|)}{\ln2} \]

问题. 给定积分$\displaystyle\int_a^b f(x)dx$有误差控制$\epsilon$, 如何得到合适的步长$h$,使得计算量足够小且满足误差控制?

 

当步长为$h$时,需要估计误差有多大?

事后误差估计

对于复化梯形公式,有

\[I(f)-T_n(f)=-h^2\frac{(b-a)}{12}f''(\xi) \]

加密一倍网络后

\[I(f)-T_{2n}(f)=-(\frac{h}2)^2\frac{(b-a)}{12}f''(\xi_2) \]

假定$f''(\xi)\approx f''(\xi_2)$,则有

\[\frac{I(f)-T_{n}(f)}{I(f)-T_{2n}(f)}\approx 2^2 \]

\[{I(f)-T_{n}(f)}\approx 2^2({I(f)-T_{2n}(f)}) \]
\[-T_{n}(f)\approx (2^2-1)I(f)-2^2T_{2n}(f) \]
\[\begin{aligned} T_{2n}(f)-T_{n}(f)\approx& (2^2-1)I(f)-(2^2-1)T_{2n}(f) \\ =&(2^2-1)[I(f)-T_{2n}(f)] \end{aligned} \]

可得

\[I(f)-T_{2n}(f)\approx\frac1{2^2-1}(T_{2n}(f)-T_{n}(f)) \]

对于复化Simpson公式

\[I(f)-S_{n}(f)\approx 2^4(I(f)-S_{2n}(f)) \]

则有

\[\begin{aligned} S_{2n}(f)-S_{n}(f)\approx& (2^4-1)I(f)-(2^4-1)S_{2n}(f) \\ =&(2^4-1)[I(f)-S_{2n}(f)] \end{aligned} \]

整理后,可以得到复化梯形公式事后误差估计公式

\[I(f)-T_{2n}(f)\approx\frac1{2^2-1}(T_{2n}(f)-T_{n}(f)) \]

同样,可以得到复化Simpson公式事后误差估计公式

\[I(f)-S_{2n}(f)\approx\frac1{2^4-1}(S_{2n}(f)-S_{n}(f)) \]

Romberg积分

利用Richardson外推,把事后误差公式加到近似计算公式上,则有

\[T_{2n}(f)+\frac13(T_{2n}(f)-T_n(f))=S_n(f) \]

可以看到,复化梯形公式经过处理后,变成了复化Simpson公式,公式的精度也从原来的$O(h^2)$变为了$O(h^4)$

类似地,对复化Simpson做同样的操作,有

\[S_{2n}(f)+\frac1{15}(S_{2n}(f)-S_n(f))=C_n(f) \]

公式的精度由原来的$O(h^4)$变为了$O(h^6)$

定理 1. (Euler-MacLaurin定理)
若积分公式$I^{(m)}$$2m$阶公式$I(f)=I^{(m)}(h)+O(h^{2m})$,则公式

\[I^{(m+1)}(\frac{h}2)=I^{m}(\frac{h}2)+\frac{I^{(m)}(\frac{h}2)-I^{(m)}(h)}{2^{2m}-1} \]

$2m+2$阶公式,即有$I(f)=I^{(m+1)}(h)+O(h^{2m+2})$

. 复化公式,经过Richardson外推操作,精度每次递增2阶

  • $R^{(k)}$来表示数值积分公式。$k=1,2,3,\cdots$分别表示得化梯形公式,复化Simpson公式,复化Cotes公式等。
  • 下标$R^{(k)}_j$表示积分点的密度。如$R^{(1)}_0$表示在最初积分点上的复化梯形公式的计算结果,$R^{(0)}_1$表示加密一倍积分点后,复化梯形公式得到的结果,$R^{(0)}_2$表示再加密一倍积分点得到的结果。

定义 2.
不断地组合低阶公式为高阶公式的Romberg积分公式

\[\displaystyle R^{(k)}_j=R^{(k-1)}_j+\frac{R^{(k-1)}_j-R^{(k-1)}_{j-1}}{2^{2k-2}-1} \]

例 4. 用Romberg积分计算$I=\int_0^1\frac{4}{1+x^2}dx$

. 解:

  1. $T_1=\frac12(f(0)+f(1))=3$
  2. $T_2=\frac12T_1+\frac12f(\frac12)=3.1$ , $S_1=\frac{4T_2-T_1}{2^2-1}=3.133333$
  3. $T_4=\frac12T_2+\frac14(f(\frac14)+f(\frac34))=3.131176$, $S_2=\frac{4T_4-T_2}{2^2-1}=3.14156863$, $C_1=\frac{16S_2-S_1}{2^4-1}=3.14211765$
  4. $T_8=\frac12T_4+\frac18(f(\frac18)+f(\frac38)+f(\frac58)+f(\frac78))=3.138988$, $S_4=\frac{4T_8-T_4}{2^2-1}=3.1415925$, $C_2=\frac{16S_4-S_2}{2^4-1}=3.141594$, $R_1=\frac{64C_2-C_2}{2^6-1}=3.141586$
  5. $T_{16}=3.140942$, $S_8=3.14159265$, $C_4=3.14159266$, $R_2=3.14159264$, $3.14159267$
  6. $T_{32}=3.141430$, $S_{16}=3.14159265$, $C_8=3.141593$, $R_4=3.141593$, $3.14159265$, $3.14159265$
梯形积分 Simpson积分 Cote 积分
$n=1$ 3
$n=2$ 3.1 3.133333
$n=4$ 3.131176 3.141569 3.142118
$n=8$ 3.138988 3.141593 3.141594 3.141586
$n={16}$ 3.140942 3.141593 3.141593 3.141593 3.141593
$n={32}$ 3.141430 3.141593 3.141593 3.141593 3.141593 3.141593

积分的自适应计算

函数变化有急有缓,为了照顾变化剧烈部分的误差,我们需要加密格点。对于变化缓慢的部分,加密格点会造成计算的浪费。

问题. 可不可以自动在变化剧烈的地方加密格点计算,而变化缓慢的地方,则取稀疏的格点计算?

adaptive

基本思路: 对于需要计算的误差阀值eps

  • 计算当前网格上的Simpson积分,得到结果v1。
  • 加密一倍网格后,计算得到结果v2。
  • 利用事后误差估计公式,由v1和v2得到误差的估计e。
    • 如果e<eps,则返回结果。
    • 否则,将区间对分为2部分,要求每一部分的误差不超过eps/2

算法

def recursive_asr(f,a,b,eps,simpson_quad):
    "Recursive implementation of adaptive Simpson's rule."
    c = (a+b) / 2.0
    left = simpsons_rule(f,a,c)
    right = simpsons_rule(f,c,b)
    if abs(left + right - simpson_quad) <= 15*eps:
        return left + right + (left + right - simpson_quad)/15.0
    return recursive_asr(f,a,c,eps/2.0,left) + recursive_asr(f,c,b,eps/2.0,right)

例 5. 用自适应Simpson积分,求

\[\int_0^4 13x(1-x)e^{-\frac32x}dx \]

adaptive1

谢谢

vertical slide 2

目录

本节读完

例 6.

[#ex9-1-0].