跳到主要内容

数值积分

阐述

计算

I=abf(x)dxIN=n=0Nf(xn)wnI=\int_a^b f(x)\mathrm dx\approx I_N=\sum_{n=0}^Nf(x_n)w_n

通过在有限个点上计算 f(x)f(x) 的值并求和来近似这个积分。方便起见,可以选取 [0,π][0,\pi] 这个区间。

梯形法则

IN=n=0N1πNf(nπ/N)+f((n+1)π/N)2I_N=\sum_{n=0}^{N-1}\frac\pi N\frac{f(n\pi/N)+f((n+1)\pi/N)}2

Clenshaw-Curtis 格点

进行变量代换:

I=11f(x)dx=0πf(cosθ)sinθdθ=a0+k=1+2a2k1(2k)2=dTaI=\int_{-1}^1f(x)\mathrm dx=\int_0^\pi f(\cos\theta)\sin\theta\mathrm d\theta=a_0+\sum_{k=1}^{+\infty}\frac{2a_{2k}}{1-(2k)^2}=d^Ta

其中 f(cosθ)f(\cos\theta) 这个部分在 [0,π][0,\pi] 内部是光滑的,而且所有奇数次导数在 0,π0,\pi 都为 0。所以

f(cosθ)=a02+k=1+akcoskθf(\cos\theta)=\frac{a_0}2+\sum_{k=1}^{+\infty}a_k\cos k\theta

的各项系数是指数衰减的。接下来计算系数:

ak=2π0πf(cosθ)coskθdθa_k=\frac2\pi\int_0^\pi f(\cos\theta)\cos k\theta\mathrm d\theta

这些系数都可以用梯形法则来计算,最终得到 a=Dya=Dy,而且这个 DD 可以用离散余弦变换算出来。最终 I=dTDy=wTyI=d^TDy=w^Ty 就是所求的法则。

自适应格点积分

  • p-适应:反复加倍 NN
  • h-适应:反复对区间二分,然后对每个区间使用固定的 NN 积分
  • h, p-适应:两者都有

如果某个比较小的 NN 格点包含在比较大的 NN 之内,则称这个积分是嵌套的。Chlenshaw-Curtis 积分是嵌套的,因为

xn=cos(πnN)x_n=\cos\left(\frac{\pi n}N\right)

实例

性质

误差分析

一般情况下,误差  1/N2~1/N^2,但有些情况下收敛速度是指数的。

[0,π][0,\pi] 上做 Fourier 展开:

f(x)=a02+k=1akcos(kx)f(x)=\frac{a_0}2+\sum_{k=1}^\infty a_k\cos (kx)

得到

IN=I+πm=1a2mNI_N=I+\pi\sum_{m=1}^\infty a_{2mN}

所以收敛速度取决于 Fourier 系数的收敛速度。例如,

  • 如果 akk2a_k\sim k^{-2},则得到的结果是 1/N21/N^2 收敛
  • 如果 akeαka_k\sim e^{-\alpha k},则得到的结果是 e2αNe^{-2\alpha N} 收敛

考虑积分

ak=2π0πf(x)coskxdxa_k=\frac2\pi\int_0^\pi f(x)\cos kx\mathrm dx

通过分部积分可以算出,如果 f(2m+1)(0)=f(2m+1)(π)f^{(2m+1)}(0)=f^{(2m+1)}(\pi),则收敛比任何多项式都要快。

相关内容

参考文献