数值分析 笔记 7
数值微分与数值积分
数值积分
指的是用数值方法计算定积分,在一些解析解非常复杂,或根本没有解析解的情况下使用
根据定积分的定义:
I(f)=∫abf(x)dx=n→∞limi=0∑n(xi+1−xi)f(ξi)
则一种近似是取一个充分大的 n,计算:
In(f)=i=0∑nAif(xi)
其中 Ai 称为积分系数,xk 称为积分节点
插值型求积公式
使用多项式函数 p(x) 来插值原函数 f(x),则将 I(f) 转化为了易于计算的多项式积分形式
具体来说,在区间 [a,b] 上取 n+1 个插值点,之后使用多项式进行 Lagrange 插值,则求积公式为:
In(f)=k=0∑n[f(xk)∫ablk(x)dx]
当 n=0,1 时:
I0(f)I1(f)=(b−a)f(2a+b)=2b−a[f(a)+f(b)]
数值积分的性质
积分余项
定义积分余项为:
Rn(x)=I(f)−In(f)
对于插值型求积公式,有:
Rn(x)=∫ab(n+1)!f(n+1)(ξ)ωn+1(x)dx
代数精度
定义一个求积公式的代数精度为:如果 In(f) 在 f 为次数不大于 m 时均准确,在 f 为次数 m+1 时不准确,则称该公式的代数精度为 m
可以证明的是:
求积公式的代数精度至少为 m 的充分必要条件是:当 f(x)=x0,x1,…,xm 时,I(f)=In(f)
两个推论:
- 由于代数精度不低于 0,因此取 f(x)=1,则有:
k=0∑nAk=b−a
- In(f) 至少有 n 阶代数精度当且仅当 In(f) 是插值型求积公式
数值性质
若对于求积公式 In(f),有:
n→∞limIn(f)=I(f)
则称该求积公式是收敛的
考虑对积分的输入进行微扰,f(x)→f~(x),则扰动大小为:
δ=∣∣f(x)−f~(x)∣∣∞=a≤x≤bmax∣f(x)−f~(x)∣
因此结果的误差为:
∣I(f)−I(f~)∣=(b−a)∣f(ξ)−f~(ξ)∣≤(b−a)δ
这说明求积分的问题一般是不敏感的
而使用求积公式时,输入进行微扰会导致:
∣In(f)−In(f~)∣=k=0∑nAk[f(xk)−f~(xk)]≤k=0∑nAkf(xk)−f~(xk)≤εk=0∑nAk
其中 ε=0≤k≤nmax∣f(xk)−f~(xk)∣≤δ
如果我们确定所有的积分系数都为正,则:
∣In(f)−In(f~)∣≤ε(b−a)
也即在 Ak≥0 的情况下,求积公式是稳定的
Newton-Cotes 公式
Newton-Cotes 是插值型求积公式的一种,将一个区间 [a,b] 均匀划分为 n 个小区间,其积分系数为:
Ak=∫ab[j=0j=k∏n(xk−xj)(x−xj)]dx
令 x=a+th,其中 h=nb−a,则积分系数为:
Ak=∫0n[j=0j=k∏n(k−j)(t−j)]nb−adt=(b−a)Ck(n)
其中 Ck(n) 是与积分区间无关的系数,被称为 Cotes 系数,低阶的 Cotes 系数表为:
|
k = 0 |
k = 1 |
k = 2 |
k = 3 |
k = 4 |
n = 1 |
21 |
21 |
|
|
|
n = 2 |
61 |
32 |
61 |
|
|
n = 3 |
81 |
83 |
83 |
81 |
|
n = 4 |
907 |
4516 |
152 |
4516 |
907 |
注:n = 1 的时候即为梯形公式,且一般不使用 n=3 的 N-C 公式
几个特例:
- 梯形公式,n=1 时的 N-C 公式
T(f)=(b−a)[21f(a)+21f(b)]
其余项为:RT=∫ab2!f′′(ξ)(x−a)(x−b)dx=−12f′′(η)(b−a)3
- Simpson 公式,n=2 时的 N-C 公式
S(f)=(b−a)[61f(a)+32f(2a+b)+61f(b)]
其余项为:RT=∫ab4!f(4)(ξ)(x−a)(x−2a+b)(x−b)dx=−2880f(4)(η)(b−a)5
- Cotes 公式,n=4 时的 N-C 公式
C(f)=(b−a)[907f(x0)+4516f(x1)+152f(x2)+4516f(x3)+907f(x4)]
但是 n=8 或 n≥10 的时候,Cotes系数表中出现了负系数,这代表此时的求积公式不稳定,并且由于 Runge 现象,n 增大并不会代表收敛性一定会增强,因此高阶 N-C 公式是不稳定、不一定准确的
可以证明,当 n 为偶数的时候,n 阶 N-C 公式至少有 n+1 阶的代数精度
因此,综合考虑计算量、稳定性与准确性,通常情况下只会使用 1,2,4,6 阶四种 N-C 公式
复合求积公式
类似全局插值和分段插值的思路,既然 N-C 公式在高阶的时候很多方面的表现都很差,那就将全局区间划分成若干个小区间,之后在每一个小区间上用低阶的 N-C 公式即可,这种方法被称为复合求积公式
复合梯形公式
将 [a,b] 划分为 n 个小区间,则:
∫xkxk+1f(x)dx≈Tn(k)=2nb−a[f(xk)+f(xk+1)]
在全区间上:
Tn=k=0∑n−1(∫xkxk+1f(x)dx)=2nb−a[f(a)+2k=1∑n−1f(xk)+f(b)]
这被称为复合梯形公式
每个区间上的截断误差,即求积余项为:
RT(k)=−12f′′(η)(nb−a)3
则复合梯形公式的截断误差为:
RT=k=0∑n−1RT(k)=−12n2f′′(η)(b−a)3=O(h2)
随着 n 的增加,即划分的精细化,误差会显著降低
对于等距节点求积公式,若其截断误差为 O(hp),则称其准确度阶数为 p,其中 h 为两个节点之间的距离
则根据上述推导,复合梯形公式具有 2 阶准确度
同样,复合梯形公式还有几条性质:
- Tn 具有 1 阶代数精度
- 对于任意可积函数 f,Tn 是收敛的
由于我们很难预知 n 的值,因此一般采取动态折半的方式,每次在区间折半的过程中,之前的所有点仍然是区间端点,计算也可以复用
记 xk+1/2=2xk+xk+1,则:
T2n(k)+T2n(k+1/2)=4nb−a[f(xk)+f(xk+1/2)]+4nb−a[f(xk+1/2)+f(xk+1)]=21Tn(k)+2nb−af(xk+1/2)
因此:
T2n=k=0∑n−1[T2n(k)+T2n(k+1/2)]=21Tn+2nb−ak=0∑n−1f(xk+1/2)
这说明,我们只需要计算新节点的函数值,即可递推得出区间折半之后的复合梯形公式
复合 Simpson
同理,我们对每一个小区间使用 Simpson 公式,则得到复合 Simpson 公式,最后化简得到的结果为:
Sn=6nb−a[f(a)+4k=0∑n−1f(2xk+xk+1)+2k=1∑n−1f(xk)+f(b)]
余项为:
RS=k=0∑n−1RS(k)=−2880n4f(4)(η)(b−a)5=O(h4)
复合 Simpson 公式的性质为:
- Sn 是稳定、收敛的
- Sn 具有 3 阶代数精度
- Sn 具有 4 阶准确度
同样,复合 Simpson 也可以递推得到,但是计算复杂度更高
Gauss 求积公式
以上的推导都是基于等距节点的,即 Akf(xk) 中的 xk 是一个已知量,而如果让其成变距节点,则可以得到更高的代数精度
我们定义当 In(f) 的代数精度不小于 2n+1 时,其称为 Gauss 求积公式,积分节点为 Gauss 点
考虑一般的带权积分:
I(f)=∫abf(x)ρ(x)dx
其对应的 Gauss 求积公式被称为 ρ(x) 对应的 Gauss 积分公式
对于一般的 Gauss 积分公式,{xk} 为 Gauss 点的充要条件是:ωn+1(x) 与 ∀P(x)∈Pn 带权正交,即:
∫abP(x)ωn+1(x)ρ(x)dx=0
证明如下:
首先证明必要性:
显然有 P(x)ωn+1(x)∈P2n+1
由于 {xk} 是 Gauss 点,且 Gauss 积分有 2n+1 阶代数精度,则有:
∫abP(x)ωn+1(x)ρ(x)dx=k=0∑nAkP(xk)ωn+1(xk)=0
之后证明充分性:
∀f(x)∈P2n+1,令:
f(x)=P(x)ωn+1(x)+Qn(x)
其中 Qn(x)∈Pn,则:
I(f)=∫abf(x)ρ(x)dx=∫abP(x)ωn+1(x)ρ(x)dx+∫abQn(x)ρ(x)dx=k=0∑nAkQn(xk)=k=0∑nAk[P(xk)ωn+1(xk)+Qn(xk)]=k=0∑nAkf(xk)=In(f)
因此其具有 2n+1 阶代数精度
证毕
这引出了如下的求 Gauss 积分公式的方式:
- 根据权函数,计算 n+1 次正交多项式的零点,即 Gauss 点
- 求出带权积分系数:
Ak=∫ablk(x)ρ(x)dx
Gauss 积分公式有如下性质:
稳定性的证明方法:
Ak=j=0∑nAjlk2(xj)=In(lk2)=∫ablk2(x)ρ(x)dx>0
最后一个等号是因为 lk(x)∈P2n+1
Gauss Legendre 公式
使用 Legendre 递推式得到正交多项式,利用这组多项式得到 Gauss 点,进而求出 Gauss 求积公式的方法
上表是使用 Legendre 多项式得到的积分节点与积分系数的表格,由于 Legendre 多项式是定义在 [−1,1] 上的,因此对于一般区间 [a,b] 上的积分,直接变量代换即可
数值微分
指在未知函数表达式的情况下,利用数值方法计算函数在某一点处的导数值
基本的有限差分公式为:
Df(x)Db(x)Dc(x)=hf(x+h)−f(x)=hf(x)−f(x−h)=2hf(x+h)−f(x−h)
利用 Taylor 展开可以得到:
Dc(x)=f′(x)+6f′′′(ξ)h2=f′(x)+O(h2)
因此 Dc(x) 的准确度为 2 阶
令 M=max∣f′′′(x)∣,则可以得到总误差限为:
εtot=6Mh2+hε
其中 ε 是单次计算 f 的舍入误差,由于分母上有个 2,因此总舍入误差最后是 2ε/2h=ε/h
因此,中心差分公式的最小误差为:
εtot=6Mh2+2hε+2hε≥3389Mε2
当且仅当 h=33ε/M 时取到
同理,我们可以利用差商计算二阶导数,乃至更高阶的导数:
Gc(h)≈2f[x−h,x,x+h]=h2f(x+h)−2f(x)+f(x−h)
同样 Taylor 可以证明这个公式的准确度也是 2 阶
这两种方法实际上都是插值求导的特例,即先根据函数值进行插值,之后对插值得到的函数求导,来近似原函数的导数,即:
f(i)(xj)=k=0∑nf(xk)lk(i)(xj)
理查德外推法
一种通过将步长减半,组合后得到更准确近似表达式的方法,可以利用在数值积分和微分上,下面以数值微分为例介绍
令:
f′(x)−Dc(h)=α1h2+α2h4+⋯+αkh2k+⋯
其中 αk 是与 h 无关的常数,则:
f′(x)−Dc(2h)=4α1h2+16α2h2+⋯+2kαkh2k+⋯
通过这两个表达式可以消除 h2 这一项,得到:
f′(x)−34Dc(2h)−Dc(h)=O(h4)
因此,34Dc(2h)−Dc(h) 则是一个准确度阶数更高的估计表达式
并且这种方法是可以不断进行下去的,可以递推的不断增加精度