计算方法B.裴玉茹.04.插值(3)

  • 数值分析课本第 3 章(插值) + PPT(多项式插值)

插值

  • PPT 补充

1. 多项式

Weierstrass 近似定理

  • 假设函数 \(f\)\([a,b]\) 区间上的连续函数,对于 \(\epsilon>0\),存在多项式 \(P(x)\) 使得对于 \([a,b]\) 区间上任意的 \(x\)\(\vert{f(x)-p(x)}\vert<\epsilon\)

  • 维尔斯特拉斯定理给出多项式的近似误差界
  • 讨论了近似多项式的存在性

泰勒多项式

  • 可以给出连续可导函数在某点附近的一个近似多项式
    • 泰勒多项式与给定函数在某一特定点上尽可能一致,但它们仅在该点附近保证精度

\[ f(x)=\sum_{k=0}^{n}\dfrac{f^{(k)}(x_0)}{k!}(x-x_0)^k+\dfrac{f^{(n+1)}(\xi(x_0))}{(n+1)!}(x-x_0)^{n+1} \]

  • 近似多项式 + 截断误差

2. 拉格朗日多项式

插值多项式

  • 插值多项式具体形式见前面的 note
  • 这里一共 \(n+1\) 个点,\((x_i,f(x_i)),i=0,\cdots,n+1\)

\[ p(x)=\sum_{k=1}^{n}f(x_k)L_{n,k}(x) \]

余项

\[ f(x)=p(x)+{\color{blue}\dfrac{f^{(n+1)}(\xi(x))}{(n+1)!}(x-x_0)(x-x_1)\cdots(x-x_n)} \]

  • 证明:note
  • 形式简单,实际操作计算困难,\(f^{(n+1)},\xi(x)\)
  • 内插外推
    • 从误差多项式看,内插比外推更准确
  • 一般来说,误差随着阶数的增加而减小,误差分布在所有给定节点上
    • 分母:\((n+1)!\)

荣格现象

  • 插值次数越高,插值结果越偏离原函数的现象称为龙格现象
  • 荣格函数 \(\dfrac{1}{1+25x^2}\)
    • 对于 \(n\) 阶的插值多项式,在区间的端点附近出现了震荡
    • 原始函数f5阶插值多项式9阶插值多项式

  • 原因:对于荣格函数,其高阶导数在区间端点数值急剧上升

重用低阶拉格朗日多项式

  • \(k\) - 点拉格朗日多项式
    • \(k\) 个整数 \(m_1,m_2,\cdots,m_k\)\(0\le m_i\le n\)
    • \(P_{m_1,\cdots,m_k}(x)\) 表示定义在 \(k\)\(x_{m_1},\cdots,x_{m_k}\) 的多项式
  • 使用低阶的拉格朗日多项式生成高阶的多项式

递推公式:Neville's 方法

  • 函数 \(f\) 定义在 \(k+1\) 个节点 \(x_0,\cdots,x_{k}\)
  • \(k\) 阶拉格朗日多项式 \(P(x)\)
  • \(i\ne j\)

\[ P(x)=\dfrac{(x-x_j)P_{0,1,\cdots,j-1,j+1,\cdots,k}(x)-(x-x_i)P_{0,1,\cdots,i-1,i+1,\cdots,k}}{x_i-x_j} \]

递推公式证明

  • \(r\ne i,j\)

\[ P(x_r)=\dfrac{f(x_r)(x_r-x_j)-f(x_r)(x_r-x_i)}{(x_i-x_j)}=f(x_r) \]

  • \(r=i\)

\[ P(x_r)=P(x_i)=\dfrac{(x_i-x_j)f(x_i)}{(x_i-x_j)}=f(x_i) \]

  • \(r=j\) 同理

使用递推公式

3. 牛顿差分多项式

差商

  • 0 阶差商

\[ f[x_i]=f(x_i) \]

  • 1 阶差商

\[ f[x_i,x_{i+1}]=\dfrac{f[x_{i+1}]-f[x_i]}{x_{i+1}-x_i} \]

  • 2 阶差商

\[ f[x_i,x_{i+1},x_{i+2}]=\dfrac{f[x_{i+1},x_{i+2}]-f[x_i,x_{i+1}]}{x_{i+2}-x_i} \]

  • k 阶差商

\[ f[x_i,\cdots,x_{i+k}]=\dfrac{f[x_{i+1},\cdots,x_{i+k}]-f[x_i,\cdots,x_{i+k-1}]}{x_{i+k}-x_i} \]

n 阶牛顿前向差分多项式

  • \(n+1\) 点插值

\[ P_n(x)=f[x_0]+\sum_{k=1}^{n}f[x_0,\cdots,x_k](x-x_0)\cdots(x-x_{k-1}) \]

前向差分与后向差分

  • 等间距公式

\[ x_i=x_0+ih,\qquad(i=0,\cdots,n) \]

  • 前向差分

\[ \begin{array}{c} \Delta{f_i}=f_{i+1}-f_i\\ \Delta^{k}{f_i}=\Delta^{k-1}(\Delta{f_i})=\Delta^{k-1}f_{i+1}-\Delta^{k-1}f_i \end{array} \]

  • 后向差分

\[ \begin{array}{c} \nabla{f_i}=f_{i+1}-f_i\\ \nabla^{k}{f_i}=\nabla^{k-1}(\nabla{f_i})=\nabla^{k-1}f_{i+1}-\nabla^{k-1}f_i \end{array} \]

牛顿前向差分与后向差分

前向差分

  • 等间距

\[ x_i=x_0+ih \]

  • \(x\) 的另一种表示

\[ x=x_0+th \]

  • 差分公式

\[ \begin{aligned} P_n(x)&=f[x_0]+\sum_{k=1}^{n}f[x_0,\cdots,x_k](x-x_0)\cdots(x-x_{k-1})\\ P_n(x)=P_n(x_0+th)&=f[x_0]+\sum_{k=1}^{n}\dfrac{\Delta^{k}f(x_0)}{k!h^{k}}t(t-1)\cdots(t-k+1)h^{k}\\ &=f[x_0]+\sum_{k=1}^{n}\dfrac{\Delta^{k}f(x_0)}{k!h^{k}}{t \choose k}k!h^{k}\\ &=f[x_0]+\sum_{k=1}^{n}{t \choose k}\Delta^{k}f(x_0)\\ &=\sum_{k=0}^{n}{t \choose k}\Delta^{k}f(x_0)\\ \end{aligned} \]

  • 误差

\[ \begin{aligned} R_{n}(x)&=\dfrac{f^{(n+1)}(\xi(x))}{(n+1)!}(x-x_0)(x-x_1)\cdots(x-x_n)\\ &=\dfrac{f^{(n+1)}(\xi(x))}{(n+1)!}t(t-1)\cdots(t-n)h^{n+1},\quad\xi(x)\in[x_0,x_n]\\ \end{aligned} \]

后向差分

  • 类似的有如下式子

  • 等间距

\[ x_i=x_0+ih=x_n-(n-i)h \]

  • \(x\) 的另一种表示

\[ x=x_n+th \]

  • 差分公式

\[ \begin{aligned} P_n(x)&=f[x_n]+\sum_{k=1}^{n}f[x_{n},\cdots,x_{n-k}](x-x_{n})\cdots(x-x_{n-k+1})\\ P_n(x)=P_n(x_0+th)&=f[x_n]+\sum_{k=1}^{n}\dfrac{\nabla^{k}f(x_0)}{k!h^{k}}t(t+1)\cdots(t+k-1)h^{k}\\ &=f[x_n]+\sum_{k=1}^{n}\dfrac{\nabla^{k}f(x_0)}{k!h^{k}}(-1)^{k}(-t)(-t-1)\cdots(-t-k+1)h^{k}\\ &=f[x_n]+\sum_{k=1}^{n}\dfrac{\nabla^{k}f(x_0)}{k!h^{k}}(-1)^{k}{-t \choose k}k!h^{k}\\ &=f[x_n]+\sum_{k=1}^{n}(-1)^{k}{-t \choose k}\nabla^{k}f(x_0)\\ &=\sum_{k=0}^{n}(-1)^{k}{-t \choose k}\nabla^{k}f(x_0)\\ \end{aligned} \]

  • 误差(一样)

\[ \begin{aligned} R_{n}(x)&=\dfrac{f^{(n+1)}(\xi(x))}{(n+1)!}(x-x_0)(x-x_1)\cdots(x-x_n)\\ &=\dfrac{f^{(n+1)}(\xi(x))}{(n+1)!}t(t-1)\cdots(t-n)h^{n+1},\quad\xi(x)\in[x_0,x_n]\\ \end{aligned} \]

选择

  • 在计算机中存在机器精度的问题,针对不同位置的数据,我们会选择使用前向差分还是后向差分
    • 估计数据离 \(x_0\) 更近:前向差分
    • 估计数据离 \(x_n\) 更近:后向差分

4. 厄米特多项式

  • 厄米特插值多项式 \(\psi\)
    • 多项式与函数在 \(n+1\) 个节点上一致
    • 切线方向也一致

\[ \begin{array}{c} \psi(x_i)=f(x_i)\\ \psi'(x_i)=f'(x_i)\\ \end{array} \]

定理

  • 如果函数 \(f\) 是连续函数 \(f\in C[a,b]\)\(x_1,\cdots,x_n\in[a,b]\),在节点 \(x_1,\cdots,x_n\) 满足 \(f\)\(f'\) 的至多 \(2n+1\) 阶厄米特多项式定义如下

\[ H_{2n+1}(x)=\sum_{j=0}^{n}f(x_j)H_{n,j}(x)+\sum_{j=1}^{n}f'(x_j)\hat{H}_{n,j}(x) \]

  • 其中

\[ \begin{array}{c} H_{n,j}(x)=[1-2(x-x_j)L'_{n,j}(x_j)]L^{2}_{n,j}(x)\\ \hat{H}_{n,j}(x)=(x-x_j)L^{2}_{n,j}(x) \end{array} \]

  • \(f\in C^{2n+2}[a,b]\),则余项

\[ f(x)-H_{2n+1}(x)=\dfrac{(x-x_0)^2\cdots(x-x_n)^2}{(2n+2)!}f^{(2n+2)}(\xi) \]

定理证明

值相等

  • 对于 \(n\) 阶拉格朗日多项式

\[ L_{n,j}(x_i)= \left\{\begin{array}{c} 0,&\mathrm{if}\ i\ne j\\ 1,&\mathrm{if}\ i=j\\ \end{array}\right. \]

  • 于是有

\[ H_{n,j}(x_i)= \left\{\begin{array}{c} 0,&\mathrm{if}\ i\ne j\\ 1,&\mathrm{if}\ i=j\\ \end{array}\right. \]

\[ \hat{H}_{n,j}(x_i)= \left\{\begin{array}{c} 0,&\mathrm{if}\ i\ne j\\ 0,&\mathrm{if}\ i=j\\ \end{array}\right. \]

  • 那么我们能够得到

\[ H_{2n+1}(x_i)=\sum_{j=0}^{n}f(x_j)H_{n,j}(x_i)+\sum_{j=1}^{n}f'(x_j)\hat{H}_{n,j}(x_i)=f(x_i) \]

一阶导相等

  • 分析

\[ \begin{array}{c} H'_{n,j}(x)=2[1-2(x-x_j)L'_{n,j}(x_j)]L_{n,j}(x)L'_{n,j}(x)-2L'_{n,j}(x_j)L^2_{n,j}(x)\\ \hat{H}'_{n,j}(x)=2(x-x_j)L_{n,j}(x)L'_{n,j}(x)+L^2_{n,j}(x)\\ \end{array} \]

  • 于是有

\[ H'_{n,j}(x_i)= \left\{\begin{array}{c} 0,&\mathrm{if}\ i\ne j\\ 0,&\mathrm{if}\ i=j\\ \end{array}\right. \]

\[ \hat{H}_{n,j}(x_i)= \left\{\begin{array}{c} 0,&\mathrm{if}\ i\ne j\\ 1,&\mathrm{if}\ i=j\\ \end{array}\right. \]

  • 得到

\[ H'_{2n+1}(x_i)=\sum_{j=0}^{n}f(x_j)H'_{n,j}(x_i)+\sum_{j=1}^{n}f'(x_j)\hat{H}'_{n,j}(x_i)=f'(x_i) \]

计算问题

  • 需要计算拉格朗日多项式及其导数
  • 即便对于低阶厄米特多项式计算复杂

利用牛顿差分公式

  • 利用牛顿差分多项式计算厄米特多项式

\[ H_{2n+1}(x)=f[z_0]+\sum_{k=1}^{n}f[z_0,\cdots,z_k](x-z_0)\cdots(x-z_{k-1}) \]

  • \(2n+2\) 个节点

\[ z_{2i}=z_{2i+1}=x_i \]

  • 复制节点对应的一阶差商的定义

\[ f[z_{2i},z_{2i+1}]=f'(z_{2i})=f'(x_i) \]

定理

  • 假设 \(f\)\(n\) 阶连续函数 \(f\in C^{n}[a,b]\)\(x_0,\cdots,x_n\)\([a,b]\) 区间中不同数,则 \([a,b]\) 区间中存在 \(\xi\) 使得

\[ f[x_0,\cdots,x_n]=\dfrac{f^{n}(\xi)}{n!} \]

  • 证明:推广罗尔定理
    • \(g(x)=f(x)-P_n(x)\)\(n+1\) 个过零点
    • \(g^{(n)}(\xi)=f^{(n)}(\xi)-n!f[x_0,\cdots,x_n]\)
  • 于是我们可以得到复制节点的差商

\[ f[z_{2i},z_{2i+1}]=f'(\xi)=f'(z_{2i})=f'(x_i) \]

计算示例

5. 方法对比

6. 三次样条插值

  • 分段多项式插值

分段线性插值

  • \(C^{0}\) 连续
    • 缺乏在节点处对函数方向(高阶导数)的描述

三次样条

  • 插值、连续、一阶导相等、二阶导相等
  • 边界条件(两个选一个即可)
    • 自由或自然边界条件:\(S''(x_0)=S''(x_n)=0\)
    • 固支边界条件:\(S'(x_0)=f'(x_0),S'(x_n)=f'(x_n)\)

对比

\(f\) \(f'\) \(f''\)
厄米特多项式 \(H(x)\) 相等 相等 未定义
三阶样条多项式 \(S(x)\) 相等 连续 连续

自然三次样条

  • \(S''(x_0)=S''(x_n)=0\)
  • note

固支三次样条

  • \(S'(x_0)=f'(x_0),S'(x_n)=f'(x_n)\)
  • note
    • 钳制三次样条的特殊情况
    • \(v_1=f'(x_0),v_2=f'(x_n)\)