Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

5.3 三次样条插值

对应教材 5.3.1–5.3.4、定理 5.4–5.5、例 4–5。老师课堂未讲,按教材补齐,标“教材有、课堂未讲”。 目标:分段三次 + 在内节点处 S,S′,S′′S,S',S'' 连续,兼顾精度与光滑性。

5.3.1 三次样条的定义

给定分划 a=x0<x1<⋯<xn=ba=x_0\lt x_1\lt\cdots\lt x_n=b 和函数值 yi=f(xi)y_i=f(x_i)。三次样条 S(x)S(x) 满足:

  1. 在每个子区间 [xi,xi+1][x_i,x_{i+1}] 上 SS 是三次多项式;
  2. S(xi)=yiS(x_i)=y_i;
  3. S,S′,S′′S,S&#x27;,S&#x27;&#x27; 在 [a,b][a,b] 上连续。

共有 nn 段、每段 4 个系数,共 4n4n 个未知;插值条件 n+1n+1 个,内节点连续性 3(n−1)3(n-1) 个,共 4n−24n-2 个,还差 2 个条件,由边界条件补:

  • 自然边界:S′′(x0)=S′′(xn)=0S&#x27;&#x27;(x_0)=S&#x27;&#x27;(x_n)=0;
  • 固支边界:S′(x0)=f′(x0),S′(xn)=f′(xn)S&#x27;(x_0)=f&#x27;(x_0), S&#x27;(x_n)=f&#x27;(x_n);
  • 周期边界:S′(x0)=S′(xn),S′′(x0)=S′′(xn)S&#x27;(x_0)=S&#x27;(x_n), S&#x27;&#x27;(x_0)=S&#x27;&#x27;(x_n)。

5.3.2 三弯矩法

记 Mi=S′′(xi)M_i=S&#x27;&#x27;(x_i),hi=xi+1−xih_i=x_{i+1}-x_i。由 S′′S&#x27;&#x27; 的线性插值和两次积分,得

Si(x)=Mi(xi+1−x)3+Mi+1(x−xi)36hi+(yi−Mihi26)xi+1−xhi+(yi+1−Mi+1hi26)x−xihi. S_i(x)=\frac{M_i(x_{i+1}-x)^3+M_{i+1}(x-x_i)^3}{6h_i} +\left(y_i-\frac{M_ih_i^2}{6}\right)\frac{x_{i+1}-x}{h_i} +\left(y_{i+1}-\frac{M_{i+1}h_i^2}{6}\right)\frac{x-x_i}{h_i}.

利用 S′S&#x27; 在内节点连续,得到三弯矩方程:

μiMi−1+2Mi+λiMi+1=di,i=1,…,n−1, \mu_iM_{i-1}+2M_i+\lambda_iM_{i+1}=d_i,\qquad i=1,\dots,n-1,

其中 μi=hi−1hi−1+hi,λi=1−μi,di=6hi−1+hi(yi+1−yihi−yi−yi−1hi−1). \mu_i=\frac{h_{i-1}}{h_{i-1}+h_i},\quad \lambda_i=1-\mu_i,\quad d_i=\frac{6}{h_{i-1}+h_i}\left(\frac{y_{i+1}-y_i}{h_i}-\frac{y_i-y_{i-1}}{h_{i-1}}\right).

这是三对角方程组,用追赶法 O(n)O(n) 求解。自然边界补 M0=Mn=0M_0=M_n=0;固支边界把 S′(x0),S′(xn)S&#x27;(x_0),S&#x27;(x_n) 写成 M0,M1M_0,M_1 与 Mn−1,MnM_{n-1},M_n 的方程。

定理 5.4:在自然/固支/周期边界条件下,三次样条插值问题存在唯一解。

定理 5.5:若 f∈C4[a,b]f\in C^4[a,b],则三次样条 SS 满足 ∥f(r)−S(r)∥∞=O(h4−r),r=0,1,2,3, \lVert f^{(r)}-S^{(r)}\rVert_\infty=O(h^{4-r}),\qquad r=0,1,2,3, 其中 h=max⁡hih=\max h_i。即函数值四阶、二阶导数二阶收敛。

5.3.3 三转角法

若改以 mi=S′(xi)m_i=S&#x27;(x_i) 为未知,利用 S′S&#x27; 在内节点连续和 S′′S&#x27;&#x27; 连续,得到关于 mim_i 的三对角方程: λimi−1+2mi+μimi+1=ci, \lambda_i m_{i-1}+2m_i+\mu_i m_{i+1}=c_i, 其中 ci=3(λiyi−yi−1hi−1+μiyi+1−yihi)c_i=3\left(\lambda_i\frac{y_i-y_{i-1}}{h_{i-1}}+\mu_i\frac{y_{i+1}-y_i}{h_i}\right)。与三弯矩法等价,只是未知量换成一阶导数;边界条件直接给 m0,mnm_0,m_n 时更方便。

5.3.4 例题与数值例子

例 4(教材 5.3.2):给定 x123f(x)248f′(1)=1.3863,f′(3)=5.5452. \begin{array}{c|ccc} x&amp;1&amp;2&amp;3\ \hline f(x)&amp;2&amp;4&amp;8 \end{array} \qquad f&#x27;(1)=1.3863,\quad f&#x27;(3)=5.5452. 这是固支边界、n=2n=2、h=1h=1 的三次样条。三弯矩方程组为 (420141024)(c1c2c3)=(14.77262436.9096). \begin{pmatrix} 4&amp;2&amp;0\ 1&amp;4&amp;1\ 0&amp;2&amp;4 \end{pmatrix} \begin{pmatrix}c_1\c_2\c_3\end{pmatrix} = \begin{pmatrix}14.7726\24\36.9096\end{pmatrix}. 解得 (c1,c2,c3)=(1.846575, 3.693150, 7.380825). (c_1,c_2,c_3)=(1.846575,\ 3.693150,\ 7.380825). 代回分段公式,可算得 S(1.5)≈2.827397,S(2.5)≈5.652741. S(1.5)\approx2.827397,\qquad S(2.5)\approx5.652741. 这组数据来自 f(x)=2xf(x)=2^x:21.5=2.8284272^{1.5}=2.828427、22.5=5.6568542^{2.5}=5.656854,与 S(1.5),S(2.5)S(1.5),S(2.5) 相差约 10−310^{-3};重点是把“边界条件 → 三对角方程 → 分段表达式”走通。

例 5(教材 5.3.4):对例 4 的数据,比较三弯矩法与三转角法的数值结果;两者给出同一条样条(唯一性),只是未知量不同。实际编程用追赶法,避免 O(n3)O(n^3) 的通用解方程。

覆盖核对

本节覆盖教材 5.3.1–5.3.4、定理 5.4–5.5、例 4–5;老师课堂未讲。下一节:5.4 曲线拟合。