数值分析 笔记 7

数值微分与数值积分

数值积分

指的是用数值方法计算定积分,在一些解析解非常复杂,或根本没有解析解的情况下使用

根据定积分的定义:

I(f)=abf(x)dx=limni=0n(xi+1xi)f(ξi)I(f) = \int_a^b f(x)dx = \lim\limits_{n \to \infty}\sum\limits_{i = 0}^{n}(x_{i + 1} - x_{i})f(\xi_i)

则一种近似是取一个充分大的 nn,计算:

In(f)=i=0nAif(xi)I_n(f) = \sum\limits_{i = 0}^{n}A_if(x_i)

其中 AiA_i 称为积分系数,xkx_k 称为积分节点

插值型求积公式

使用多项式函数 p(x)p(x) 来插值原函数 f(x)f(x),则将 I(f)I(f) 转化为了易于计算的多项式积分形式

具体来说,在区间 [a,b][a, b] 上取 n+1n + 1 个插值点,之后使用多项式进行 Lagrange 插值,则求积公式为:

In(f)=k=0n[f(xk)ablk(x)dx]I_n(f) = \sum\limits_{k = 0}^{n}\Big[f(x_k)\int_a^bl_k(x)dx\Big]

n=0,1n = 0, 1 时:

I0(f)=(ba)f(a+b2)I1(f)=ba2[f(a)+f(b)]\begin{align*} I_0(f) &= (b - a)f(\frac{a + b}{2}) \\ I_1(f) &= \frac{b - a}{2}[f(a) + f(b)] \end{align*}

数值积分的性质

积分余项

定义积分余项为:

Rn(x)=I(f)In(f)R_n(x) = I(f) - I_n(f)

对于插值型求积公式,有:

Rn(x)=abf(n+1)(ξ)(n+1)!ωn+1(x)dxR_n(x) = \int_a^b \frac{f^{(n + 1)}(\xi)}{(n + 1)!}\omega_{n + 1}(x)dx

代数精度

定义一个求积公式的代数精度为:如果 In(f)I_n(f)ff 为次数不大于 mm 时均准确,在 ff 为次数 m+1m + 1 时不准确,则称该公式的代数精度mm

可以证明的是:

求积公式的代数精度至少为 mm 的充分必要条件是:当 f(x)=x0,x1,,xmf(x) = x^0, x^1, \dots, x^m 时,I(f)=In(f)I(f) = I_n(f)

两个推论:

  1. 由于代数精度不低于 00,因此取 f(x)=1f(x) = 1,则有:

k=0nAk=ba\sum\limits_{k = 0}^{n}A_k = b - a

  1. In(f)I_n(f) 至少有 nn 阶代数精度当且仅当 In(f)I_n(f) 是插值型求积公式

数值性质

若对于求积公式 In(f)I_n(f),有:

limnIn(f)=I(f)\lim\limits_{n \to\infty}I_n(f) = I(f)

则称该求积公式是收敛的

考虑对积分的输入进行微扰,f(x)f~(x)f(x) \to \tilde{f}(x),则扰动大小为:

δ=f(x)f~(x)=maxaxbf(x)f~(x)\delta = ||f(x) - \tilde{f}(x)||_\infty = \max\limits_{a\leq x \leq b}|f(x) - \tilde{f}(x)|

因此结果的误差为:

I(f)I(f~)=(ba)f(ξ)f~(ξ)(ba)δ|I(f) - I(\tilde{f})| = (b - a)|f(\xi) - \tilde{f}(\xi)| \leq (b - a)\delta

这说明求积分的问题一般是不敏感的

而使用求积公式时,输入进行微扰会导致:

In(f)In(f~)=k=0nAk[f(xk)f~(xk)]k=0nAkf(xk)f~(xk)εk=0nAk\begin{align*} |I_n(f) - I_n(\tilde{f})| &= \Big|\sum\limits_{k = 0}^{n}A_k\big[f(x_k) - \tilde{f}(x_k)\big]\Big| \\ &\leq \sum\limits_{k = 0}^{n}\big|A_k\big|\big|f(x_k) - \tilde{f}(x_k)\big| \\ &\leq \varepsilon\sum\limits_{k = 0}^{n}\big|A_k\big| \\ \end{align*}

其中 ε=max0knf(xk)f~(xk)δ\varepsilon = \max\limits_{0\leq k \leq n}|f(x_k) - \tilde{f}(x_k)| \leq \delta

如果我们确定所有的积分系数都为正,则:

In(f)In(f~)ε(ba)\begin{align*} |I_n(f) - I_n(\tilde{f})| \leq \varepsilon(b - a) \\ \end{align*}

也即在 Ak0A_k \geq 0 的情况下,求积公式是稳定的

Newton-Cotes 公式

Newton-Cotes 是插值型求积公式的一种,将一个区间 [a,b][a, b] 均匀划分为 nn 个小区间,其积分系数为:

Ak=ab[j=0jkn(xxj)(xkxj)]dxA_k = \int_a^b \Bigg[ \prod\limits_{\substack{j = 0 \\j \neq k}}^{n}\frac{(x - x_j)}{(x_k - x_j)}\Bigg] dx

x=a+thx = a + th,其中 h=banh = \dfrac{b - a}{n},则积分系数为:

Ak=0n[j=0jkn(tj)(kj)]bandt=(ba)Ck(n)A_k = \int_0^n \Bigg[ \prod\limits_{\substack{j = 0 \\j \neq k}}^{n}\frac{(t - j)}{(k - j)}\Bigg]\frac{b - a}{n} dt = (b - a)C_k^{(n)}

其中 Ck(n)C_k^{(n)} 是与积分区间无关的系数,被称为 Cotes 系数,低阶的 Cotes 系数表为:

k = 0 k = 1 k = 2 k = 3 k = 4
n = 1 12\frac{1}{2} 12\frac{1}{2}
n = 2 16\frac{1}{6} 23\frac{2}{3} 16\frac{1}{6}
n = 3 18\frac{1}{8} 38\frac{3}{8} 38\frac{3}{8} 18\frac{1}{8}
n = 4 790\frac{7}{90} 1645\frac{16}{45} 215\frac{2}{15} 1645\frac{16}{45} 790\frac{7}{90}

注:n = 1 的时候即为梯形公式,且一般不使用 n=3n = 3 的 N-C 公式

几个特例:

  1. 梯形公式,n=1n = 1 时的 N-C 公式

    T(f)=(ba)[12f(a)+12f(b)]T(f) = (b - a)\big[\frac{1}{2}f(a) + \frac{1}{2}f(b)\big]

    其余项为:

    RT=abf(ξ)2!(xa)(xb)dx=f(η)12(ba)3R_T = \int_a^b \frac{f''(\xi)}{2!}(x - a)(x - b)dx = -\frac{f''(\eta)}{12}(b - a)^{3}

  2. Simpson 公式,n=2n = 2 时的 N-C 公式

    S(f)=(ba)[16f(a)+23f(a+b2)+16f(b)]S(f) = (b - a)\big[\frac{1}{6}f(a) + \frac{2}{3}f(\frac{a + b}{2}) + \frac{1}{6}f(b)\big]

    其余项为:

    RT=abf(4)(ξ)4!(xa)(xa+b2)(xb)dx=f(4)(η)2880(ba)5R_T = \int_a^b \frac{f^{(4)}(\xi)}{4!}(x - a)(x - \frac{a + b}{2})(x - b)dx = -\frac{f^{(4)}(\eta)}{2880}(b - a)^{5}

  3. Cotes 公式,n=4n = 4 时的 N-C 公式

    C(f)=(ba)[790f(x0)+1645f(x1)+215f(x2)+1645f(x3)+790f(x4)]C(f) = (b - a)\big[\frac{7}{90}f(x_0) + \frac{16}{45}f(x_1) + \frac{2}{15}f(x_2) + \frac{16}{45}f(x_3) + \frac{7}{90}f(x_4)\big]

但是 n=8n = 8n10n \geq 10 的时候,Cotes系数表中出现了负系数,这代表此时的求积公式不稳定,并且由于 Runge 现象,nn 增大并不会代表收敛性一定会增强,因此高阶 N-C 公式是不稳定、不一定准确的

可以证明,当 nn 为偶数的时候,nn 阶 N-C 公式至少有 n+1n + 1 阶的代数精度

因此,综合考虑计算量、稳定性与准确性,通常情况下只会使用 1,2,4,61, 2, 4, 6 阶四种 N-C 公式

复合求积公式

类似全局插值和分段插值的思路,既然 N-C 公式在高阶的时候很多方面的表现都很差,那就将全局区间划分成若干个小区间,之后在每一个小区间上用低阶的 N-C 公式即可,这种方法被称为复合求积公式

复合梯形公式

[a,b][a, b] 划分为 nn 个小区间,则:

xkxk+1f(x)dxTn(k)=ba2n[f(xk)+f(xk+1)]\int_{x_k}^{x_{k + 1}}f(x)dx \approx T_{n}^{(k)} = \frac{b - a}{2n}[f(x_k) + f(x_{k + 1})]

在全区间上:

Tn=k=0n1(xkxk+1f(x)dx)=ba2n[f(a)+2k=1n1f(xk)+f(b)]T_n = \sum\limits_{k = 0}^{n - 1}\Bigg(\int_{x_k}^{x_{k + 1}}f(x)dx\Bigg) = \frac{b - a}{2n}\Big[f(a) + 2\sum\limits_{k = 1}^{n - 1}f(x_k) + f(b)\Big]

这被称为复合梯形公式

每个区间上的截断误差,即求积余项为:

RT(k)=f(η)12(ban)3R_T^{(k)} = -\frac{f''(\eta)}{12}\big(\frac{b - a}{n}\big)^{3}

则复合梯形公式的截断误差为:

RT=k=0n1RT(k)=f(η)12n2(ba)3=O(h2)R_T = \sum\limits_{k = 0}^{n - 1}R_{T}^{(k)} = -\frac{f''(\eta)}{12n^{2}}\big(b - a)^{3} = O(h^{2})

随着 nn 的增加,即划分的精细化,误差会显著降低

对于等距节点求积公式,若其截断误差为 O(hp)O(h^p),则称其准确度阶数为 pp,其中 hh 为两个节点之间的距离

则根据上述推导,复合梯形公式具有 2 阶准确度

同样,复合梯形公式还有几条性质:

  • TnT_n 具有 1 阶代数精度
  • 对于任意可积函数 ffTnT_n 是收敛的

由于我们很难预知 nn 的值,因此一般采取动态折半的方式,每次在区间折半的过程中,之前的所有点仍然是区间端点,计算也可以复用

xk+1/2=xk+xk+12x_{k + 1/2} = \dfrac{x_k + x_{k + 1}}{2},则:

T2n(k)+T2n(k+1/2)=ba4n[f(xk)+f(xk+1/2)]+ba4n[f(xk+1/2)+f(xk+1)]=12Tn(k)+ba2nf(xk+1/2)\begin{align*} T_{2n}^{(k)} + T_{2n}^{(k + 1/2)} &= \frac{b - a}{4n}[f(x_k) + f(x_{k + 1/2})] + \frac{b - a}{4n}[f(x_{k + 1/2}) + f(x_{k + 1})] \\ &= \frac{1}{2}T_{n}^{(k)} + \frac{b - a}{2n}f(x_{k + 1/2}) \end{align*}

因此:

T2n=k=0n1[T2n(k)+T2n(k+1/2)]=12Tn+ba2nk=0n1f(xk+1/2)\begin{align*} T_{2n} &= \sum\limits_{k = 0}^{n - 1}\big[T_{2n}^{(k)} + T_{2n}^{(k + 1/2)}\big] \\ &= \frac{1}{2}T_{n} + \frac{b - a}{2n}\sum\limits_{k = 0}^{n - 1}f(x_{k + 1/2}) \end{align*}

这说明,我们只需要计算新节点的函数值,即可递推得出区间折半之后的复合梯形公式

复合 Simpson

同理,我们对每一个小区间使用 Simpson 公式,则得到复合 Simpson 公式,最后化简得到的结果为:

Sn=ba6n[f(a)+4k=0n1f(xk+xk+12)+2k=1n1f(xk)+f(b)]S_n = \frac{b - a}{6n}\Big[f(a) + 4\sum\limits_{k = 0}^{n - 1}f(\frac{x_k + x_{k + 1}}{2}) + 2\sum\limits_{k = 1}^{n - 1}f(x_k) + f(b)\Big]

余项为:

RS=k=0n1RS(k)=f(4)(η)2880n4(ba)5=O(h4)R_S = \sum\limits_{k = 0}^{n - 1}R_{S}^{(k)} = -\frac{f^{(4)}(\eta)}{2880n^4}(b - a)^{5} = O(h^{4})

复合 Simpson 公式的性质为:

  • SnS_n 是稳定、收敛的
  • SnS_n 具有 3 阶代数精度
  • SnS_n 具有 4 阶准确度

同样,复合 Simpson 也可以递推得到,但是计算复杂度更高

Gauss 求积公式

以上的推导都是基于等距节点的,即 Akf(xk)A_kf(x_k) 中的 xkx_k 是一个已知量,而如果让其成变距节点,则可以得到更高的代数精度

我们定义当 In(f)I_n(f) 的代数精度不小于 2n+12n + 1 时,其称为 Gauss 求积公式,积分节点为 Gauss 点

考虑一般的带权积分:

I(f)=abf(x)ρ(x)dxI(f) = \int_a^b f(x)\rho(x)dx

其对应的 Gauss 求积公式被称为 ρ(x)\rho(x) 对应的 Gauss 积分公式

对于一般的 Gauss 积分公式,{xk}\{x_{k}\} 为 Gauss 点的充要条件是:ωn+1(x)\omega_{n + 1}(x)P(x)Pn\forall P(x) \in \mathbb{P}_{n} 带权正交,即:

abP(x)ωn+1(x)ρ(x)dx=0\int_a^b P(x)\omega_{n + 1}(x)\rho(x)dx = 0

证明如下:

首先证明必要性:
显然有 P(x)ωn+1(x)P2n+1P(x)\omega_{n + 1}(x) \in \mathbb{P}_{2n + 1}
由于 {xk}\{x_{k}\} 是 Gauss 点,且 Gauss 积分有 2n+12n + 1 阶代数精度,则有:

abP(x)ωn+1(x)ρ(x)dx=k=0nAkP(xk)ωn+1(xk)=0\begin{align*}\int_a^b P(x)\omega_{n + 1}(x)\rho(x)dx &= \sum\limits_{k = 0}^{n}A_{k}P(x_k)\omega_{n + 1}(x_{k}) = 0\end{align*}

之后证明充分性:
f(x)P2n+1\forall f(x) \in \mathbb{P}_{2n + 1},令:

f(x)=P(x)ωn+1(x)+Qn(x)f(x) = P(x)\omega_{n + 1}(x) + Q_{n}(x)

其中 Qn(x)PnQ_n(x) \in \mathbb{P}_{n},则:

I(f)=abf(x)ρ(x)dx=abP(x)ωn+1(x)ρ(x)dx+abQn(x)ρ(x)dx=k=0nAkQn(xk)=k=0nAk[P(xk)ωn+1(xk)+Qn(xk)]=k=0nAkf(xk)=In(f)\begin{align*} I(f) = \int_a^b f(x)\rho(x)dx &= \int_a^b P(x)\omega_{n + 1}(x)\rho(x)dx + \int_a^b Q_n(x)\rho(x)dx \\ &= \sum\limits_{k = 0}^{n}A_kQ_n(x_k) \\ &= \sum\limits_{k = 0}^{n}A_k[P(x_k)\omega_{n + 1}(x_k) + Q_n(x_k)] \\ &= \sum\limits_{k = 0}^{n}A_kf(x_k) = I_n(f)\end{align*}

因此其具有 2n+12n + 1 阶代数精度

证毕

这引出了如下的求 Gauss 积分公式的方式:

  1. 根据权函数,计算 n+1n + 1 次正交多项式的零点,即 Gauss 点
  2. 求出带权积分系数:

    Ak=ablk(x)ρ(x)dxA_k = \int_a^b l_k(x)\rho(x)dx

Gauss 积分公式有如下性质:

  • Gauss 积分公式是稳定的、准确的
  • 积分余项为:

    Rn[f]=f(2n+2)(η)(2n+2)!abωn+12(x)ρ(x)dxR_n[f] = \frac{f^{(2n + 2)}(\eta)}{(2n + 2)!}\int_a^b\omega_{n + 1}^{2}(x)\rho(x)dx

稳定性的证明方法:

Ak=j=0nAjlk2(xj)=In(lk2)=ablk2(x)ρ(x)dx>0A_{k} = \sum\limits_{j = 0}^{n}A_jl_k^2(x_j) = I_n(l_k^2) = \int_a^bl_k^2(x)\rho(x)dx > 0

最后一个等号是因为 lk(x)P2n+1l_k(x) \in \mathbb{P}_{2n + 1}

Gauss Legendre 公式

使用 Legendre 递推式得到正交多项式,利用这组多项式得到 Gauss 点,进而求出 Gauss 求积公式的方法

Gauss-Legendre积分表
Gauss-Legendre积分表

上表是使用 Legendre 多项式得到的积分节点与积分系数的表格,由于 Legendre 多项式是定义在 [1,1][-1, 1] 上的,因此对于一般区间 [a,b][a, b] 上的积分,直接变量代换即可

数值微分

指在未知函数表达式的情况下,利用数值方法计算函数在某一点处的导数值

基本的有限差分公式为:

Df(x)=f(x+h)f(x)hDb(x)=f(x)f(xh)hDc(x)=f(x+h)f(xh)2h\begin{align*} D_f(x) &= \frac{f(x + h) - f(x)}{h} \\ D_b(x) &= \frac{f(x) - f(x - h)}{h} \\ D_c(x) &= \frac{f(x + h) - f(x - h)}{2h} \end{align*}

利用 Taylor 展开可以得到:

Dc(x)=f(x)+f(ξ)6h2=f(x)+O(h2)D_c(x) = f'(x) + \frac{f'''(\xi)}{6}h^2 = f'(x) + O(h^{2})

因此 Dc(x)D_c(x) 的准确度为 2 阶

M=maxf(x)M = \max|f'''(x)|,则可以得到总误差限为:

εtot=Mh26+εh\varepsilon_{\text{tot}} = \frac{Mh^{2}}{6} + \frac{\varepsilon}{h}

其中 ε\varepsilon 是单次计算 ff 的舍入误差,由于分母上有个 2,因此总舍入误差最后是 2ε/2h=ε/h2\varepsilon / 2h = \varepsilon / h

因此,中心差分公式的最小误差为:

εtot=Mh26+ε2h+ε2h39Mε283\varepsilon_{\text{tot}} = \frac{Mh^{2}}{6} + \frac{\varepsilon}{2h} + \frac{\varepsilon}{2h} \geq 3\sqrt[3]{\frac{9M\varepsilon^{2}}{8}}

当且仅当 h=3ε/M3h = \sqrt[3]{3\varepsilon / M} 时取到

同理,我们可以利用差商计算二阶导数,乃至更高阶的导数:

Gc(h)2f[xh,x,x+h]=f(x+h)2f(x)+f(xh)h2G_c(h) \approx 2f[x - h, x, x + h] = \frac{f(x + h) - 2f(x) + f(x - h)}{h^2}

同样 Taylor 可以证明这个公式的准确度也是 2 阶

这两种方法实际上都是插值求导的特例,即先根据函数值进行插值,之后对插值得到的函数求导,来近似原函数的导数,即:

f(i)(xj)=k=0nf(xk)lk(i)(xj)f^{(i)}(x_j) = \sum\limits_{k = 0}^{n}f(x_k)l_k^{(i)}(x_j)

理查德外推法

一种通过将步长减半,组合后得到更准确近似表达式的方法,可以利用在数值积分和微分上,下面以数值微分为例介绍

令:

f(x)Dc(h)=α1h2+α2h4++αkh2k+f'(x) - D_c(h) = \alpha_1 h^2 + \alpha_2 h^4 + \cdots + \alpha_k h^{2k} + \cdots

其中 αk\alpha_k 是与 hh 无关的常数,则:

f(x)Dc(h2)=α14h2+α216h2++αk2kh2k+f'(x) - D_c(\frac{h}{2}) = \frac{\alpha_1}{4} h^2 + \frac{\alpha_2}{16} h^2 + \cdots + \frac{\alpha_k}{2^k} h^{2k} + \cdots

通过这两个表达式可以消除 h2h^{2} 这一项,得到:

f(x)4Dc(h2)Dc(h)3=O(h4)f'(x) - \frac{4D_c(\frac{h}{2}) - D_c(h)}{3} = O(h^{4})

因此,4Dc(h2)Dc(h)3\dfrac{4D_c(\frac{h}{2}) - D_c(h)}{3} 则是一个准确度阶数更高的估计表达式

并且这种方法是可以不断进行下去的,可以递推的不断增加精度