在本篇笔记中,我们研究如何将一些散点采用多项式拟合,以及如何采用多项式近似地刻画一些复杂的或未知的函数。

# 插值和多项式逼近

若存在一个点集 (统计数据的集合) {(x0,y0),(x1,y1),,(xn,yn)}\{(x_0,y_0),(x_1,y_1),\dots,(x_n,y_n)\}, 其中 i,j,xixj\forall i,j,\;x_i\neq x_j. 我们希望采用一个多项式函数拟合统计数据,或者说拟合某个连续函数。对于此,我们有几个问题需要依次讨论:

  1. 是否存在足够接近的多项式函数;
  2. 如何给出多项式函数的表达式;
  3. 多项式拟合函数的拟合误差是多少;
  4. 如何快速计算多项式拟合函数。

# Weierstrass 逼近定理

f(x)C[a,b]f(x) \in C[a,b]ε>0\forall \varepsilon > 0, P(x)R[x]\exists P(x) \in \mathbb{R}[x] 使得 f(x)P(x)<ε|f(x) - P(x)| < \varepsilon, x[a,b]\forall x\in [a,b]. 该定理称为魏尔斯特拉斯逼近定理 (Weierstrass Approximation Theorem). 该定理说明,对任何一个连续函数 f(x)f(x), 都存在一系列多项式函数 {Pi(x)}\{P_i(x)\} 一致逼近 f(x)f(x).

Weierstrass 逼近定理说明任何一个函数都是可以采用多项式函数一致逼近的,因此采用多项式进行函数拟合是有意义的。

# Lagrange 插值公式

# 公式

一般的 Lagrange 插值公式为:

P(x)=k=0nf(xk)Ln,k(x)P(x) = \sum_{k=0}^nf(x_k)L_{n,k}(x)

其中

Ln,k(x):=i=0iknxxixkxiL_{n,k}(x) := \prod_{\substack{i=0 \\ i\neq k}}^n\frac{x-x_i}{x_k-x_i}

称为基函数 (basis function). 若不发生混淆,可以将 Ln,kL_{n,k} 简记为 LkL_k.

# 误差估计

Lagrange 插值多项式的余项为

# Neville 方法

Neville 方法是用来简化拉格朗日插值项计算的,其采用了递归的方法。首先,我们引入记号:

  1. Pxi1,xi2,,xikP_{x_{i_1},x_{i_2},\dots,x_{i_k}} 表示采用点 xi1,xi2,,xikx_{i_1},x_{i_2},\dots,x_{i_k} 进行插值。
  2. Qi,jQ_{i,j} 表示在 j+1j+1 个节点 xij,xij+1,,xi1,xix_{i-j},x_{i-j+1},\dots,x_{i-1},x_i 上进行插值的多项式。

于是根据插值多项式的性质,可以得到

Qk,0=Pk=f(xk)Q_{k,0} = P_k = f(x_k)

作为插值迭代的初值,

Qi,j=(xxij)Qi,j1(xxi)Qi1,j1xixi1,j<iQ_{i,j} = \frac{(x-x_{i-j})Q_{i,j-1} - (x-x_i)Q_{i-1,j-1}}{x_i - x_{i-1}}, \quad j < i

作为插值迭代的递推式。

这样,就可以利用迭代得到 Qn,n=P(x)Q_{n,n} = P(x) 即最终的插值多项式。该方法就被称为 Neville 方法

# 差商

差商 (divided difference) 是一种简单的递归式函数记法。规则如下:

f[xi]=f(xi)f[xi,xi+1]=f[xi+1]f[xi]xi+1xif[xi,xi+1,xi+2]=f[xi+1,xi+2]f[xi,xi+1]xi+2xif[xi,xi+1,,xi+k]=f[xi+1,xi+2,,xi+k]f[xi,xi+1,,xi+k1]xi+kxi\begin{aligned} & f[x_i] = f(x_i) \\ & f[x_i,x_{i+1}] = \frac{f[x_{i+1}] - f[x_i]}{x_{i+1}-x_i} \\ & f[x_i,x_{i+1}, x_{i+2}] = \frac{f[x_{i+1},x_{i+2}] - f[x_i, x_{i+1}]}{x_{i+2}-x_i} \\ & \cdots \\ & f[x_i,x_{i+1},\dots,x_{i+k}] = \frac{f[x_{i+1},x_{i+2},\dots,x_{i+k}] - f[x_i,x_{i+1},\dots,x_{i+k-1}]}{x_{i+k}-x_i} \end{aligned}

差商的大小是可以估计的,有

f[x0,x1,,xn]=f(n)(ξ)n!,ξ(x0,xn)f[x_0,x_1,\dots,x_n] = \frac{f^{(n)}(\xi)}{n!},\;\xi \in (x_0,x_n)

# Hermite 插值

# 密切多项式

x0,x1,,xnx_0,x_1,\dots,x_n 是区间 [a,b][a,b]n+1n+1 个不同的点,对 miNm_i \in \mathbb{N}, i=0,1,,ni = 0,1,\dots,n, 记 m=max{mi}i=0nm = \max\{m_i\}_{i=0}^n, 并假设 fCm[a,b]f \in C^m[a,b], 则 ff密切多项式 (osculating polynomial) PP 是满足

P(j)(xi)=f(j)(xi),i=0,1,,n,j=0,1,,miP^{(j)}(x_i) = f^{(j)}(x_i),\quad \forall i = 0,1,\dots,n,\ j=0,1,\dots,m_i

的次数最低的多项式。

可以看出,密切多项式是一个相当泛化的概念,其对每一个插值点都要求了不同的导数相等阶数 mim_i. 这样的定义一般不具有特别显著的意义。如果我们要求诸 mim_i 存在一定的关系,那么将更易研究。

# Hermite 多项式

i=0,1,,n\forall i = 0,1,\dots,n, mi=1m_i = 1 的密切多项式就是埃尔米特多项式 (Hermite polynomial). 其次数最高为 2n+12n+1, 采用下式给出:

H2n+1(x)=j=0nf(xj)Hn,j(x)+j=0nf(xj)H^n,j(x)H_{2n+1}(x) = \sum_{j=0}^nf(x_j)H_{n,j}(x) + \sum_{j=0}^nf'(x_j)\hat{H}_{n,j}(x)

其中

Hn,j(x)=(12(xxj)Ln,j(xj))Ln,j2(x)H^n,j(x)=(xxj)Ln,j2(x)\begin{aligned} & H_{n,j}(x) = (1-2(x-x_j)L_{n,j}'(x_j))L_{n,j}^2(x)\\ & \hat{H}_{n,j}(x) = (x-x_j)L_{n,j}^2(x) \end{aligned}

估计误差

f(x)H2n+1(x)=i=0n(xxi)2(2n+2)!f2n+2(ξ),ξ(a,b)f(x)-H_{2n+1}(x) = \frac{\prod_{i=0}^n(x-x_i)^2}{(2n+2)!}f^{2n+2}(\xi),\;\xi \in (a,b)

# 差商形式

H2n+1(x)=k=02k+1f[z0,,zk]i=0k(xxi)H_{2n+1}(x) = \sum_{k=0}^{2k+1}f[z_0,\dots,z_k]\prod_{i=0}^k(x-x_i)

# 龙格震荡与样条插值

前述的插值都是基于单一函数的插值。我们希望一个函数满足 2n2n 个条件,那么其次数将达到 2n12n-1. 这样高次的函数带来的插值不能反映数据点原本的特征。这种现象在机器学习上称为过拟合 (over-fitting), 在数值分析中则称为龙格现象 (Runge phenomenon).

这两种现象的问题背景有所不同。在数值分析中,我们的基本要求仍然是满足上述的条件,不能使插值函数原理插值点。

因此,我们尝试采用分段函数进行插值。这样就可以降低插值函数的次数了。这种方式称为样条插值 (piecewise polynomial interpolation).