在本篇笔记中,我们研究如何将一些散点采用多项式拟合,以及如何采用多项式近似地刻画一些复杂的或未知的函数。
# 插值和多项式逼近
若存在一个点集 (统计数据的集合) {(x0,y0),(x1,y1),…,(xn,yn)}, 其中 ∀i,j,xi=xj. 我们希望采用一个多项式函数拟合统计数据,或者说拟合某个连续函数。对于此,我们有几个问题需要依次讨论:
- 是否存在足够接近的多项式函数;
- 如何给出多项式函数的表达式;
- 多项式拟合函数的拟合误差是多少;
- 如何快速计算多项式拟合函数。
# Weierstrass 逼近定理
对 f(x)∈C[a,b] 及 ∀ε>0, ∃P(x)∈R[x] 使得 ∣f(x)−P(x)∣<ε, ∀x∈[a,b]. 该定理称为魏尔斯特拉斯逼近定理 (Weierstrass Approximation Theorem). 该定理说明,对任何一个连续函数 f(x), 都存在一系列多项式函数 {Pi(x)} 一致逼近 f(x).
Weierstrass 逼近定理说明任何一个函数都是可以采用多项式函数一致逼近的,因此采用多项式进行函数拟合是有意义的。
# Lagrange 插值公式
# 公式
一般的 Lagrange 插值公式为:
P(x)=k=0∑nf(xk)Ln,k(x)
其中
Ln,k(x):=i=0i=k∏nxk−xix−xi
称为基函数 (basis function). 若不发生混淆,可以将 Ln,k 简记为 Lk.
# 误差估计
Lagrange 插值多项式的余项为
# Neville 方法
Neville 方法是用来简化拉格朗日插值项计算的,其采用了递归的方法。首先,我们引入记号:
- Pxi1,xi2,…,xik 表示采用点 xi1,xi2,…,xik 进行插值。
- Qi,j 表示在 j+1 个节点 xi−j,xi−j+1,…,xi−1,xi 上进行插值的多项式。
于是根据插值多项式的性质,可以得到
Qk,0=Pk=f(xk)
作为插值迭代的初值,
Qi,j=xi−xi−1(x−xi−j)Qi,j−1−(x−xi)Qi−1,j−1,j<i
作为插值迭代的递推式。
这样,就可以利用迭代得到 Qn,n=P(x) 即最终的插值多项式。该方法就被称为 Neville 方法。
# 差商
差商 (divided difference) 是一种简单的递归式函数记法。规则如下:
f[xi]=f(xi)f[xi,xi+1]=xi+1−xif[xi+1]−f[xi]f[xi,xi+1,xi+2]=xi+2−xif[xi+1,xi+2]−f[xi,xi+1]⋯f[xi,xi+1,…,xi+k]=xi+k−xif[xi+1,xi+2,…,xi+k]−f[xi,xi+1,…,xi+k−1]
差商的大小是可以估计的,有
f[x0,x1,…,xn]=n!f(n)(ξ),ξ∈(x0,xn)
# Hermite 插值
# 密切多项式
令 x0,x1,…,xn 是区间 [a,b] 内 n+1 个不同的点,对 mi∈N, i=0,1,…,n, 记 m=max{mi}i=0n, 并假设 f∈Cm[a,b], 则 f 的密切多项式 (osculating polynomial) P 是满足
P(j)(xi)=f(j)(xi),∀i=0,1,…,n, j=0,1,…,mi
的次数最低的多项式。
可以看出,密切多项式是一个相当泛化的概念,其对每一个插值点都要求了不同的导数相等阶数 mi. 这样的定义一般不具有特别显著的意义。如果我们要求诸 mi 存在一定的关系,那么将更易研究。
# Hermite 多项式
∀i=0,1,…,n, mi=1 的密切多项式就是埃尔米特多项式 (Hermite polynomial). 其次数最高为 2n+1, 采用下式给出:
H2n+1(x)=j=0∑nf(xj)Hn,j(x)+j=0∑nf′(xj)H^n,j(x)
其中
Hn,j(x)=(1−2(x−xj)Ln,j′(xj))Ln,j2(x)H^n,j(x)=(x−xj)Ln,j2(x)
估计误差
f(x)−H2n+1(x)=(2n+2)!∏i=0n(x−xi)2f2n+2(ξ),ξ∈(a,b)
# 差商形式
H2n+1(x)=k=0∑2k+1f[z0,…,zk]i=0∏k(x−xi)
# 龙格震荡与样条插值
前述的插值都是基于单一函数的插值。我们希望一个函数满足 2n 个条件,那么其次数将达到 2n−1. 这样高次的函数带来的插值不能反映数据点原本的特征。这种现象在机器学习上称为过拟合 (over-fitting), 在数值分析中则称为龙格现象 (Runge phenomenon).
这两种现象的问题背景有所不同。在数值分析中,我们的基本要求仍然是满足上述的条件,不能使插值函数原理插值点。
因此,我们尝试采用分段函数进行插值。这样就可以降低插值函数的次数了。这种方式称为样条插值 (piecewise polynomial interpolation).