数值积分
引入:数值积分的两种思路
思路1:使用Newton-Leibniz公式
∫abf(x)dx=F(b)−F(a)
问题:一些函数没有初等的原函数
思路2:使用积分的定义
∫abf(x)dx=n→∞,h→0limi=0∑n(xi+1−xi)f(ξi)
问题:计算量太大
解决方案:使用机械求积公式
In(f)=k=0∑nAkf(xk)
即:使用f(x)的若干个函数值加权求和得到
注 为什么这里的记号使用In(f)而不是In(x)?因为一般而言求积公式是一种方法,它对任何满足一定条件的函数都是通用的,输入一个函数,输出一个在给定区间上的积分值。积分值与f有关,与x无关
插值型求积公式
假设对于此函数在区间[a,b]内有已知点x0,x1,⋯,xn,其余函数值未知,则根据Lagrange插值公式:
p(x)=k=0∑nf(xk)lk(x)
于是得到积分公式
In(f)=k=0∑nf(xk)∫ablk(x)dx
即积分公式中的积分系数
Ak=∫ablk(x)dx
这对应着每一个插值点处的脉冲基函数的积分
求积公式的通用讨论
积分余项与代数精度
定义(积分余项) 设使用公式In(f)计算积分I(f),则
R[f]=I(f)−In(f)
称为此积分的积分余项
注 它反应了计算的截断误差
若In(f)为插值函数p(x)的积分,则
R[f]=∫ab[f(x)−p(x)]dx
即此时的积分余项为插值余项的积分,根据插值余项的估计可知
R[f]=∫ab(n+1)!f(n+1)(ξ)ωn+1(x)dx
定义(代数精度) 若In(f)对于被积函数f(x)是次数不超过m的多项式的情况下都是准确的,对m+1次多项式可能不准确,则称该求积公式具有m次代数精度
对于梯形公式:
I1(f)=2b−a[f(a)+f(b)]
它具有1次代数精度
中矩形公式:
I0(f)=(b−a)f(2a+b)
也具有1次代数精度,因此代数精度与求积用到的插值点数目并没有必然的关系
定理 机械求积公式In(f)=∑k=0nAkf(xk)至少有m次代数精度等价于此公式对f(x)=1,x,⋯,xm分别准确
推论 求积公式至少0次代数精度时,满足∑k=0nAk=b−a
注 只要满足上面的等式,求积公式就一定具有0次代数精度,不满足此等式的求积公式可以认为是不可用的,因此上面的等式可以被认为是对可用的求积公式都成立的结论
定理 插值型求积公式In(f)至少具有n次代数精度,且至少具有n次代数精度的求积公式一定是插值型求积公式
收敛性与稳定性
定义(求积公式的收敛性) 对于机械求积公式In(f)=∑k=0nAkf(xk),设h为所有插值点间距的最大值,则求积公式收敛定义为
n→∞,h→0limIn(f)=∫abf(x)dx
数值积分问题的敏感性分析
设函数从f(x)变为f~(x),扰动的大小定义为
δ=∣∣f(x)−f~(x)∣∣∞=a≤x≤bmax∣f(x)−f~(x)∣
则结果误差
∫abf(x)dx−∫abf~(x)dx≤∫abf(x)−f~(x)dx≤(b−a)δ
于是问题的绝对条件数的上限为(b−a)
机械求积公式的敏感性分析
当f(x)变为f~(x)时,
∣In(f)−In(f~)∣=k=0∑nAk[f(xk)−f~(xk)]
≤k=0∑n∣Ak∣⋅∣f(xk)−f~(xk)∣≤(k=0∑n∣Ak∣)ϵ
其中
ϵ=0≤k≤nmax∣f(xk)−f~(xk)∣≤δ
由于我们已知
k=0∑nAk=b−a
因此若所有Ak均正,我们有
∣In(f)−In(f~)∣≤(b−a)δ
否则无法得出有效的放缩,因此
定义(机械求积公式的稳定性) 若所有Ak均正,则称机械求积公式In(f)是稳定的
Newton-Cotes公式
使用插值型求积公式,让节点xk在区间上均匀分布,即h=(b−a)/n,xk=a+kh
此时得到的求积公式为
In(f)=k=0∑nAkf(xk)
Ak=∫ab(xk−x0)⋯(xk−xk−1)(xk−xk+1)⋯(xk−xn)(x−x0)⋯(x−xk−1)(x−xk+1)⋯(x−xn)dx
这称为n阶Newton-Cotes公式
此时作换元x=a+th,则
Ak=∫0nj=0,j=k∏n(k−jt−j)d(a+th)=∫0nj=0,j=k∏n(k−jt−j)hb−adt
=(b−a)Ck(n)
其中Ck(n)与积分区间无关,称为n阶N-C公式的Cotes系数,其满足
k=0∑nCk(n)=1
Ck(n)=Cn−k(n)
当n=8时,存在负的Ck(n),此时N-C公式不稳定
三种常用的低阶N-C公式:
n=1:T(f)=(b−a)[21f(a)+21f(b)]
n=2:S(f)=(b−a)[61f(a)+64f(2a+b)+61f(b)]
n=4:C(f)=(b−a)[907f(x0)+9032f(x1)+9012f(x2)+9032f(x3)+907f(x4)]
n=1,2,4时分别称为梯形公式、Simpson公式、Cotes公式
定理(N-C公式的额外代数精度) n为偶数时,n阶N-C公式至少有n+1阶代数精度
注 这说明偶数阶N-C公式相比一般的插值型积分公式有一阶额外的代数精度
证明 只需要讨论f(x)=xn+1时的积分余项
R[f]=∫ab(n+1)!f(n+1)(ξ)ωn+1(x)dx=∫abωn+1(x)dx=hn+2∫0nj=0∏n(t−j)dt
此时考虑积分
∫0nj=0∏n(t−j)dt
作换元t=u+n/2,则
∫−n/2n/2H(u)du
其中
H(u)=j=0∏n(u+n/2−j)=j=−n/2∏n/2(u−j)
此时H(u)是奇函数,因此上述积分为0,故偶数阶N-C公式的对xn+1也准确
注 这说明偶数阶N-C公式的额外代数精度来自于其插值点选取的对称性
注 因此最常用的N-C公式为n=1,2,4的情况,n=3的情形一般不用,它与n=2的代数精度相同但计算量更大
低阶N-C公式的积分余项
梯形公式
RT=I(f)−T(f)=∫ab2f′′(ξ)(x−a)(x−b)dx
此时应用第一积分中值定理可知
RT=2f′′(η)∫ab(x−a)(x−b)dx=−12f′′(η)(b−a)3
Simpson公式
RS=−2880f(4)(η)(b−a)5
N-C公式的稳定性和收敛性
稳定性
n=8的N-C公式不稳定,且n≥10时必定不稳定
收敛性
由于龙格现象,即高次多项式插值不能很好地收敛于原始函数,N-C公式在n增大的情况下并不一定收敛到准确解
结论
一般只使用n=1,2,4,6的N-C公式
主要计算量为n+1次函数求值,其余计算量都可以通过查Cotes系数表省去
复合求积公式
高阶N-C公式不稳定,于是并非阶数越高越好
在函数插值中,同样也并非越高次插值越好,可以采用分段低次插值
于是,可以从分段插值导出复合求积公式
复合梯形公式
将[a,b]等分为n个子区间,对每个子区间采用梯形公式,则
Tn(f)=k=0∑n−12h[f(xk)+f(xk+1)]
其中h=(b−a)/n
其积分误差可以估计为:
k=0∑n−112f′′(ηk)(nb−a)3≈12n2f′′(η)(b−a)3
此截断误差随区间长度h减小按O(h2)减小,这被称为具有2阶准确度
类似可以定义p阶准确度,定义略
上面的求积公式也是一种机械求积公式:
Tn(f)=2h[f(a)+2k=0∑n−1f(xk)+f(b)]
没有负数系数,故此求积公式稳定且收敛
复合Simpson公式
Sn=6hk=0∑n−1[f(xk)+4f(xk+1/2)+f(xk+1)]
=6h[f(a)+f(b)+4k=0∑n−1f(xk+1/2)+2k=1∑n−1f(xk)]
其中f(xk+1/2)为f(xk)和f(xk+1)的中点
Sn具有稳定性、收敛性、3次代数精度、4阶准确度
注 复合求积公式的代数精度一般和对应的简单求积公式相同
注 代数精度描述的是对怎样的函数能够无误差,精确度描述的是对任意的函数能够有多小的误差;代数精度是静态的代数结论,精确度是随区间逐渐细分的渐进动态过程
步长折半策略
在实际计算积分时,我们往往有一个给定的精度需求,即可容忍的最大误差,但误差与步长h只有渐进表达式,在实际计算中往往动态确定步长
此时可以采用步长折半策略:每次计算后,如果没有达到给定的精度要求,则将h变为上一次的一半继续计算,此时有一半的插值点已经完成计算,只需要重新计算
具体地,折半前:
Tn=2h[f(a)+2k=1∑n−1f(xk)+f(b)]
折半后:
T2n=4h[f(a)+2k=1∑2n−1f(xk/2)+f(b)]
=21Tn+2hk=0∑n−1f(xk+1/2)
即:只需计算折半时新增节点的函数值,且这种重用不需要存储之前计算好的函数值
注 复合Simpson公式计算时重用效率会低一些,但仍然可以重用;而中矩形公式一般不用于复合求积,就是因为复合中矩形公式无法在步长折半时复用计算
理查森外推方法
回忆之前得到的复合梯形公式的余项:
I(f)−Tn=−12h2(b−a)f′′(η)=O(h2)
事实上,这个O(h2)是某个对每个f确定的h的函数
定理 设被积函数f(x)∈C∞[a,b],记T(h)为积分步长为h时复合梯形公式的结果,则
T(h)=I(f)+α1h2+α2h4+⋯+αlh2l+⋯
其中系数αl与h无关
注 于是,我们可以通过一些h比较大的近似计算的结果来反推出αl的近似值,从而利用上面的余项展开式来得到更精确的结果,这就是理查森外推法的思想
然而,αl虽然与h无关,但与f有关,因此其精确值一般情况下也是不可知的
我们可以在步长折半的过程中通过外推法得到更高阶的求积公式,例如,设折半前步长为h,计算结果为
T0(n)=I+α1h2+α2h4+⋯
折半后的结果为
T0(n+1)=I+4α1h2+16α2h4+⋯
使用这两个公式拼凑,可以抵消掉h2项,得到
T1(n)=34T0(n+1)−T0(n)=I+O(h4)
于是得到了一个更高阶(此处指的准确度而非代数精度)的求积公式
在实际计算中,可以列三角形数表Tk(n)计算
注 三角形数表上下标的含义
Tk(n)由Tk−1(n)和Tk−1(n+1)外推得到
k表示得到这个公式的外推阶数,对应2k+2阶准确度;n表示得到这个公式的所有基础公式的最小二分次数,在这个公式中的h相等于(a−b)/2n
理查森外推算法的问题:
- 对函数有光滑性要求
- 外推一次牺牲了步长,例如T1(0)需要使用步长为(a−b)/2的点来计算,但其对应的余项公式中的h实际为a−b
使用理查森外推的积分公式也叫Romberg积分公式
高斯求积公式
Newton-Cotes公式中最重要的前提是选取等距插值节点,但这其实是不必要的。N-C公式中,我们通过对称选取插值节点,对偶数阶公式取得了更高的代数精度,但事实上,选取恰当的插值节点还能得到更高的代数精度
考虑机械求积公式
In=k=0∑nAkf(xk)
此公式中积分系数和积分节点一共有2n+2个待定参数,理论上可以达到至少2n+1次的代数精度
定义 满足上面说的最高代数精度的求积公式称为(n阶)高斯求积公式,此时的积分节点称为高斯点
由于需要满足2n+1阶代数精度的方程是通过指定被积函数为1,x,⋯,x2n+1得到的,因此这些待定参数与被积函数f无关,可以实现求出;但由于待定参数中包含高斯点,高斯点与积分上下限有关
例(1阶高斯公式)
假设积分限为[−1,1],所求积分公式为
G1(f)=A0f(x0)+A1f(x1)
将f=1,x,x2,x3分别代入:
A0+A1=2A0x0+A1x1=0A0x02+A1x12=32A0x03+A1x13=0
解得
G1(f)=f(−33)+f(33)
一般高斯求积公式求法
高斯求积公式是插值型求积公式,因此只要能确定高斯点xk就可以确定系数Ak:
Ak=∫ablk(x)dx
主要考虑如何求解高斯点
考虑带权积分:
I=∫abf(x)ρ(x)dx
这里的权函数ρ(x)满足在积分限内非负、可积
上述所有积分理论都可以应用到带权积分中,对每个权函数可以求出一套高斯点,下面讨论对带权积分的通用求法
定理(高斯点的充要条件) xk, k=0,1,⋯,n是高斯点的充要条件是多项式
ωn+1(x)=(x−x0)(x−x1)⋯(x−xn)
与∀P(x)∈Pn正交,即
∫abP(x)ωn+1(x)ρ(x)dx=0
注 上面的 正交 指的是,在给定积分限和权函数的积分体系下正交
证明 - 必要性
当xk是高斯点时,高斯积分有2n+1次代数精度,故对任何不超过n次的多项式P,P(x)ωn+1(x)不超过2n+1次,故
In(ωn+1P)=I(ωn+1P)
左侧等于
k=0∑nAkP(xk)ωn+1(xk)=0
故右侧也为0
证明 - 充分性
对于任何f(x)∈P2n+1,可以将其除以多项式ωn+1,得到
f(x)=Pn(x)ωn+1(x)+Qn(x)
其中
Pn,Qn∈Pn
于是
∫abf(x)ρ(x)dx=∫abPn(x)ωn+1(x)ρ(x)dx+∫abQn(x)ρ(x)dx
右侧第一项根据正交性条件可知为零;而由于In是x0,⋯,xn确定的插值型求积公式,至少有n阶代数精度,故有
∫abf(x)ρ(x)dx=∫abQn(x)ρ(x)dx=k=0∑nAkQn(xk)
由于ωn+1在所有插值点处取0,可知f(xk)=Qn(xk),∀k,于是
∫abf(x)ρ(x)dx=k=0∑nAkf(xk)=In
结论 高斯点就是n+1次正交多项式的零点
注 正交多项式与权函数有关;根据正交多项式的性质,正交多项式的零点都是积分区间内的单实根
高斯求积公式具有稳定性,这是因为:
Ak=j=0∑nAjlk2(xj)=∫ablk2(x)ρ(x)dx≥0
注 上面第一个等号是由于lk只在对应插值点取非零值而得到的天然相等;第二个等号是由于高斯公式具有2n+1阶代数精度,而lk2是2n阶多项式;注意对一般的插值求积公式,第二个等号未必满足
同时,高斯求积公式还具有收敛性,其余项为
Rn[f]=(2n+2)!f(2n+2)(η)∫abωn+12(x)ρ(x)dx
当积分区间为[−1,1],权函数为ρ(x)=1时,正交多项式退化为勒让德多项式,此时的高斯点即为勒让德多项式的零点,此时的高斯积分公式称为高斯-勒让德公式
此公式的xk和Ak可以通过查表得到,比较有实用价值
数值微分
数值微分使用有限差分近似计算导数,常用的差分公式有:
向前差分
Df(h)=hf(x+h)−f(x)
向后差分
Db(h)=hf(x)−f(x−h)
中心差分
Dc(h)=2hf(x+h)−f(x−h)
注 上述三个公式分别相当于[x,x+h]、[x−h,x]、[x−h,x+h]上的一阶差商,由于差商与导数有关系
f[x0,⋯,xn]=n!f(n)(ξ)
对一阶差商的情形就是f′(ξ),其中ξ属于上述对应的区间,这就是差分近似的差商解释
高阶差分近似也可以用差商解释
由于
f(x+h)=f′(x)h+2f′′(x)h2+6f′′′(ξ1)h3
f(x−h)=−f′(x)h+2f′′(x)h2−6f′′′(ξ2)h3
可知
Dc(h)=f′(x)+6f′′′(ξ)h2=f′(x)+O(h2)
向前差分和向后差分在渐进准确度上都不如中心差分
中心差分的误差分析
ϵtot=6Mh2+hϵ
其中第一项为截断误差,M为∣f′′′(ξ)∣的上界;第二项为传递误差,ϵ为计算f(x)的误差限
随着h变小,第一项减小,第二项增大,最小值在
h=3M3ϵ
时取到,此时可以求得最准确的解
二阶中心差分
f′′(x)≈Gc(h)=2f[x−h,x,x+h]=h2f(x+h)−2f(x)+f(x−h)
准确度为2阶
插值型求导公式
类似插值型求积公式,插值型求导公式的思路为利用插值函数的导数近似原始函数的导数
采用Lagrange插值:
Ln(x)=k=0∑nf(xk)lk(x)≈f(x)
则导数近似为
f(i)(x)≈k=0∑nf(xk)lk(i)(x)
增加插值节点可以得到更高准确度的导数公式,或是求更高阶导数的公式;在给定插值点个数的情况下,准确度和导数阶数提高一个一般会降低另一个
数值微分的外推算法
类似数值积分,中心差分公式也存在某种误差展开式:
Dc(h)=f′(x)+α1h2+α2h4+⋯+αkh2k+⋯
其中αk与h无关
此时可以类似积分中做的方法,使用理查森外推构造更准确的公式
这里本质上也是在通过提高插值点个数来提高精度