在多项式插值与Hermite 插值中,我们构造的都是跨越整个定义域 [a,b][a, b] 的全局单一多项式。

全局高次多项式面临一个固有的架构缺陷:全局刚性。因为整条曲线被同一个解析式支配,只要在局部微调一个采样点,由此引发的波动就会传导至整个区间。当实际工程中的采样点膨胀到成百上千个时,全局高次拟合不仅条件数恶化,而且计算极不稳定。

现代数值计算的破局之道是分段逼近:将大区间 [a,b][a, b] 细分为若干子区间,在每个区间上分别拟合低次多项式,并在交界节点处施加严格的光滑拼接。

本篇笔记系统建立分段插值与三次样条的理论框架[1][1] R. L. Burden and J. D. Faires, Numerical Analysis, 9th ed. Brooks/Cole, Cengage Learning, 2011., [2][2] M. U. School of Mathematics, “MTH2051: Introduction to Computational Mathematics: Course Lecture Notes and Study Workbooks,” 2026. Monash University course materials and study workbooks, Semester 2, 2026.:

  1. 分段线性插值:推导带有精确常数 1/81/8 的 h28max⁡∣f′′∣\frac{h^2}{8} \max |f''| 一致误差界;
  2. 分段二次插值:基于区间中点的 O(h3)\mathcal{O}(h^3) 局部逼近;
  3. 三次样条插值:在 C2C^2 光滑度与未知自由度之间建立严谨核算;
  4. 三大边界条件:对比自然边界、固支边界与非节点边界,剖析边界曲率不兼容时的降阶现象;
  5. 三弯矩方程组:推导严格对角占优的三对角线性系统,以 O(n)\mathcal{O}(n) 复杂度快速求解;
  6. 方法决策全景图:系统整理各类插值方法的选用边界。

分段线性插值

最朴素的分段逼近方法,是用折线段顺次连接相邻的已知数据点。

定义分段线性插值函数

设剖分 a=x0<x1<⋯<xn=ba = x_0 < x_1 < \dots < x_n = b 将区间 [a,b][a, b] 划分为 nn 个子区间。在每个子区间 [xi,xi+1][x_i, x_{i+1}] 上,线性插值多项式定义为:

Li(x)=f(xi)xi+1−xxi+1−xi+f(xi+1)x−xixi+1−xi.L_i(x) = f(x_i) \frac{x_{i+1} - x}{x_{i+1} - x_i} + f(x_{i+1}) \frac{x - x_i}{x_{i+1} - x_i}.

全局分段线性插值函数由各段拼合而成:当 x∈[xi,xi+1]x \in [x_i, x_{i+1}] 时,L(x)=Li(x)L(x) = L_i(x)。

在任意内部分界节点 xix_i 处,左右相邻两段的函数值相等:Li−1(xi)=f(xi)=Li(xi)L_{i-1}(x_i) = f(x_i) = L_i(x_i)。因此全局折线是连续的:L∈C0([a,b])L \in C^0([a, b])。但两侧的斜率 Li−1′L'_{i-1} 与 Li′L'_i 通常并不相等,接缝处保留着尖锐折角,故 L∉C1([a,b])L \notin C^1([a, b])。

精确常数的一致误差上界

引理子区间二次因式极值

设子区间 [xi,xi+1][x_i, x_{i+1}] 长度为 hi=xi+1−xih_i = x_{i+1} - x_i。定义在 [xi,xi+1][x_i, x_{i+1}] 上的二次多项式 q(x)=(x−xi)(xi+1−x)q(x) = (x - x_i)(x_{i+1} - x) 满足

max⁡x∈[xi,xi+1]∣(x−xi)(xi+1−x)∣=hi24,\max_{x \in [x_i, x_{i+1}]} |(x - x_i)(x_{i+1} - x)| = \frac{h_i^2}{4},

且该最大值在区间中点 xm=xi+xi+12x_m = \frac{x_i + x_{i+1}}{2} 处唯一取得。

证明

展开二次函数 q(x)=−x2+(xi+xi+1)x−xixi+1q(x) = -x^2 + (x_i + x_{i+1})x - x_i x_{i+1},其导数为 q′(x)=−2x+(xi+xi+1)q'(x) = -2x + (x_i + x_{i+1})。令导数归零,解出驻点位于中点:xm=(xi+xi+1)/2x_m = (x_i + x_{i+1})/2。

因为二阶导数 q′′(x)=−2<0q''(x) = -2 < 0,函数图像为开口向下的抛物线,极大值即为最大值:

q(xm)=(xm−xi)(xi+1−xm)=(hi2)(hi2)=hi24.q(x_m) = (x_m - x_i)(x_{i+1} - x_m) = \left( \frac{h_i}{2} \right) \left( \frac{h_i}{2} \right) = \frac{h_i^2}{4}.

而在两端点处 q(xi)=q(xi+1)=0q(x_i) = q(x_{i+1}) = 0,因此该上界在整段子区间上严格成立。

定理分段线性插值误差界

设 f∈C2([a,b])f \in C^2([a, b]),且最大步长为 h=max⁡i(xi+1−xi)h = \max_i (x_{i+1} - x_i)。则全局误差满足:

max⁡x∈[a,b]∣f(x)−L(x)∣≤h28max⁡t∈[a,b]∣f′′(t)∣.\max_{x \in [a, b]} |f(x) - L(x)| \le \frac{h^2}{8} \max_{t \in [a, b]} |f''(t)|.
证明

在每个子区间 [xi,xi+1][x_i, x_{i+1}] 上,根据 Cauchy 插值误差公式,对每个 x∈[xi,xi+1]x \in [x_i, x_{i+1}] 均存在中间点 ξx∈(xi,xi+1)\xi_x \in (x_i, x_{i+1}) 满足

f(x)−Li(x)=f′′(ξx)2(x−xi)(x−xi+1).f(x) - L_i(x) = \frac{f''(\xi_x)}{2} (x - x_i)(x - x_{i+1}).

两边取绝对值并结合引理 1:

∣f(x)−Li(x)∣≤12(max⁡t∈[xi,xi+1]∣f′′(t)∣)(hi24)=hi28max⁡t∈[xi,xi+1]∣f′′(t)∣.|f(x) - L_i(x)| \le \frac{1}{2} \left( \max_{t \in [x_i, x_{i+1}]} |f''(t)| \right) \left( \frac{h_i^2}{4} \right) = \frac{h_i^2}{8} \max_{t \in [x_i, x_{i+1}]} |f''(t)|.

在所有子区间 i=0,…,n−1i = 0, \dots, n-1 上取最大值,即得全局一致估计。

如果直接对绝对值因式放缩 ∣x−xi∣≤hi|x - x_i| \le h_i 和 ∣x−xi+1∣≤hi|x - x_{i+1}| \le h_i,得到的系数是较为粗糙的 1/21/2。利用抛物线顶点性质,将领先常数收紧到 1/81/8,精度提升了 4 倍。其收敛速度为二阶:网格步长减半,最大误差缩小至四分之一。

分段二次插值

为了进一步提高逼近阶数,可以在每个子区间 [xi,xi+1][x_i, x_{i+1}] 上,除了两个端点外,额外采集子区间中点 mi=(xi+xi+1)/2m_i = (x_i + x_{i+1})/2 处的函数值:

(xi,f(xi)),(mi,f(mi)),(xi+1,f(xi+1)).(x_i, f(x_i)), \quad (m_i, f(m_i)), \quad (x_{i+1}, f(x_{i+1})).

在各个子区间内部,这是一个三节点二次 Lagrange 插值问题。若 f∈C3f \in C^3,局部截断误差具备如下形式:

f(x)−Qi(x)=f(3)(ξ)3!(x−xi)(x−mi)(x−xi+1),f(x) - Q_i(x) = \frac{f^{(3)}(\xi)}{3!} (x - x_i)(x - m_i)(x - x_{i+1}),

收敛速度提升至三阶 O(hi3)\mathcal{O}(h_i^3)。

然而,分段抛物线在相邻区间的交界节点 xix_i 处仍然无法保证斜率吻合:Qi−1′(xi)≠Qi′(xi)Q'_{i-1}(x_i) \neq Q'_i(x_i)。曲线在节点处依旧存在肉眼可见的尖点与折光。

三次样条插值

为了彻底消除斜率与曲率的跳跃断裂,且无需盲目抬高多项式次数,我们引入三次样条插值。

“样条(Spline)”原本是指造船和制图工人使用的一种富有弹性的细木条。绘图时用重铁压块(Ducks)将木条固定在若干特征点上,木条在弹性形变下自然弯曲,能量泛函取极小,从而在整条曲线上保持连续的二阶导数。

定义三次样条插值函数

设剖分 a=x0<x1<⋯<xn=ba = x_0 < x_1 < \dots < x_n = b。若函数 S(x)S(x) 满足如下条件,则称其为穿过数据点 (xi,f(xi))(x_i, f(x_i)) 的三次样条插值函数:

  1. 分段三次:在每个子区间 [xi,xi+1][x_i, x_{i+1}] 上,S(x)=Si(x)S(x) = S_i(x) 为次数不超过 33 的多项式;
  2. 点值插值:对每个节点均满足 S(xi)=f(xi)S(x_i) = f(x_i)(i=0,1,…,ni = 0, 1, \dots, n);
  3. C2C^2 高度光滑:函数自身 S(x)S(x)、一阶导数 S′(x)S'(x) 以及二阶导数 S′′(x)S''(x) 在整个区间 [a,b][a, b] 上处处连续。

约束核算与自由度守恒

核对三次样条多项式的待定系数与方程约束:

  • 共有 nn 个子区间,每个子区间是一条三次曲线 Si(x)=ai+bix+cix2+dix3S_i(x) = a_i + b_i x + c_i x^2 + d_i x^3;
  • 每段有 4 个待定未知数,总未知系数为 4n4n 个;
  • 各段端点插值条件:每段子区间的左右两个端点必须咬合给定数据点,共提供 2n2n 个方程;
  • 内节点一阶导数连续:在 n−1n-1 个内部分界点处要求斜率衔接 Si−1′(xi)=Si′(xi)S'_{i-1}(x_i) = S'_i(x_i),提供 n−1n-1 个方程;
  • 内节点二阶导数连续:在 n−1n-1 个内部分界点处要求曲率衔接 Si−1′′(xi)=Si′′(xi)S''_{i-1}(x_i) = S''_i(x_i),提供 n−1n-1 个方程。

将所有内部约束相加:

2n+(n−1)+(n−1)=4n−2.2n + (n - 1) + (n - 1) = 4n - 2.

比较未知数与约束数:

4n−(4n−2)=2 个剩余自由度。4n - (4n - 2) = 2 \text{ 个剩余自由度}。

为了使三次样条方程组具备唯一解,必须额外指定且仅指定两个边界条件。

样条边界条件分类

在数值分析中,最常用的三种边界处理方案为:

定义常用三次样条边界条件
  1. 自然边界条件(Natural / Free Boundary):
S′′(x0)=0且S′′(xn)=0.S''(x_0) = 0 \quad \text{且} \quad S''(x_n) = 0.

强制曲线在两端点处的二阶导数归零,几何形态等价于两端自由伸展的弹性薄板。 2. 固支边界条件(Clamped / Complete Boundary):

S′(x0)=f′(x0)且S′(xn)=f′(xn).S'(x_0) = f'(x_0) \quad \text{且} \quad S'(x_n) = f'(x_n).

直接锁定两端点的切线斜率,使其精准对齐真实函数的一阶导数。 3. 非节点边界条件(Not-a-knot Boundary):

S′′′(x) 在 x1 与 xn−1 处连续。S'''(x) \text{ 在 } x_1 \text{ 与 } x_{n-1} \text{ 处连续}。

这迫使第一段与第二段合为同一个三次多项式,最后两段也合为同一个三次多项式,使内部首尾节点不再是分段断点(要求 n≥3n \ge 3)。

穿过三个点的自然三次样条,展示在内部分段接缝处的 C2 连续性以及边界端点处的二阶导数归零。

穿过三个点的自然三次样条,展示在内部分段接缝处的 C2 连续性以及边界端点处的二阶导数归零。

精度核验:自然边界的曲率失配陷阱

教材中常笼统提及三次样条具备四阶一致收敛率 O(h4)\mathcal{O}(h^4)。需要注意:该结论对固支边界和非节点边界严格成立,但对自然边界存在适用前提。

对于 f∈C4([a,b])f \in C^4([a, b]),固支边界能够确保误差被四阶导数控制:

max⁡x∈[a,b]∣f(x)−S(x)∣≤Ch4max⁡t∈[a,b]∣f(4)(t)∣.\max_{x \in [a, b]} |f(x) - S(x)| \le C h^4 \max_{t \in [a, b]} |f^{(4)}(t)|.

然而,自然边界条件强制了 S′′(a)=S′′(b)=0S''(a) = S''(b) = 0。如果待逼近的原函数在端点处原本具有非零曲率(f′′(a)≠0f''(a) \neq 0 或 f′′(b)≠0f''(b) \neq 0),边界处就会发生强制曲率失配。

以二次函数 f(x)=x2f(x) = x^2 为例,其四阶导数恒等于零 f(4)≡0f^{(4)} \equiv 0。但自然样条在边界处被强制赋予二阶导数为 0(而真实函数二阶导数为 2),导致样条根本无法精确复原 x2x^2。在此类曲率不兼容的情况下,自然样条的全局收敛率会退化为二阶:

max⁡x∈[a,b]∣f(x)−Snatural(x)∣=O(h2).\max_{x \in [a, b]} |f(x) - S_{\text{natural}}(x)| = \mathcal{O}(h^2).

只有当原函数在边界处恰好自然满足 f′′(a)=f′′(b)=0f''(a) = f''(b) = 0 时,自然样条的四阶收敛速度方能得以恢复。

三弯矩方程组与三对角快速求解

若直接将 4n4n 个多项式多项式系数代入联立方程组,规模庞大且计算低效。在数值计算中,通常以各节点处的二阶导数(弯矩)作为核心未知数:

Mi=S′′(xi),i=0,1,…,n.M_i = S''(x_i), \quad i = 0, 1, \dots, n.

由于每段 Si(x)S_i(x) 是三次多项式,其二阶导数 Si′′(x)S''_i(x) 在区间 [xi,xi+1][x_i, x_{i+1}] 上必然是线性函数。利用线性插值公式:

Si′′(x)=Mixi+1−xhi+Mi+1x−xihi,hi=xi+1−xi.S''_i(x) = M_i \frac{x_{i+1} - x}{h_i} + M_{i+1} \frac{x - x_i}{h_i}, \quad h_i = x_{i+1} - x_i.

将 Si′′(x)S''_i(x) 连续两次积分,并代入端点值条件 Si(xi)=yiS_i(x_i) = y_i 和 Si(xi+1)=yi+1S_i(x_{i+1}) = y_{i+1},可以直接写出样条解析式:

Si(x)=Mi(xi+1−x)36hi+Mi+1(x−xi)36hi+(yi−Mihi26)xi+1−xhi+(yi+1−Mi+1hi26)x−xihi.S_i(x) = M_i \frac{(x_{i+1} - x)^3}{6 h_i} + M_{i+1} \frac{(x - x_i)^3}{6 h_i} + \left( y_i - \frac{M_i h_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}.

这一构造天然满足了数值插值与二阶导数连续性。接下来,只需强制一阶导数在各个内节点处光滑衔接:

Si−1′(xi)=Si′(xi),i=1,2,…,n−1.S'_{i-1}(x_i) = S'_i(x_i), \quad i = 1, 2, \dots, n - 1.

对 Si(x)S_i(x) 求导并令两侧导数相等,整理即得经典的三弯矩方程组:

定理三对角样条方程组(三弯矩方程)

对每个内部节点 i=1,2,…,n−1i = 1, 2, \dots, n - 1,二阶导数序列 Mi=S′′(xi)M_i = S''(x_i) 满足:

hi−1Mi−1+2(hi−1+hi)Mi+hiMi+1=6(yi+1−yihi−yi−yi−1hi−1).h_{i-1} M_{i-1} + 2(h_{i-1} + h_i) M_i + h_i M_{i+1} = 6 \left( \frac{y_{i+1} - y_i}{h_i} - \frac{y_i - y_{i-1}}{h_{i-1}} \right).

在自然边界条件下,由于 M0=Mn=0M_0 = M_n = 0,上式构成关于内部未知量 M1,…,Mn−1M_1, \dots, M_{n-1} 的 (n−1)×(n−1)(n-1) \times (n-1) 阶线性方程组:

[2(h0+h1)h10…0h12(h1+h2)h2…00h22(h2+h3)…0⋮⋱⋱⋮0…0hn−22(hn−2+hn−1)][M1M2M3⋮Mn−1]=[d1d2d3⋮dn−1].\begin{bmatrix} 2(h_0 + h_1) & h_1 & 0 & \dots & 0 \\ h_1 & 2(h_1 + h_2) & h_2 & \dots & 0 \\ 0 & h_2 & 2(h_2 + h_3) & \dots & 0 \\ \vdots & & \ddots & \ddots & \vdots \\ 0 & \dots & 0 & h_{n-2} & 2(h_{n-2} + h_{n-1}) \end{bmatrix} \begin{bmatrix} M_1 \\ M_2 \\ M_3 \\ \vdots \\ M_{n-1} \end{bmatrix} = \begin{bmatrix} d_1 \\ d_2 \\ d_3 \\ \vdots \\ d_{n-1} \end{bmatrix}.

观察系数矩阵的每一行:

2(hi−1+hi)>hi−1+hi.2(h_{i-1} + h_i) > h_{i-1} + h_i.

主对角线元素严格大于非对角元素绝对值之和,矩阵满足严格对角占优,且对称正定。由 Gershgorin 圆盘定理可知,该矩阵必然非奇异且条件数良好。

利用专门针对三对角矩阵的 Thomas 追赶法(Tridiagonal Gaussian Elimination),可以在严格的 O(n)\mathcal{O}(n) 时间复杂度与 O(n)\mathcal{O}(n) 空间内完成求解。

注与教材待定系数形式的符号对齐

在经典教材体系中[1][1] R. L. Burden and J. D. Faires, Numerical Analysis, 9th ed. Brooks/Cole, Cengage Learning, 2011.,三次样条常以各子区间左端点为基准展开为:

Sj(x)=aj+bj(x−xj)+cj(x−xj)2+dj(x−xj)3,x∈[xj,xj+1].S_j(x) = a_j + b_j(x - x_j) + c_j(x - x_j)^2 + d_j(x - x_j)^3, \quad x \in [x_j, x_{j+1}].

由于 Sj′′(xj)=2cj=MjS''_j(x_j) = 2 c_j = M_j,三弯矩法求得的节点二阶导数 MjM_j 与教材系数具有直接的一一映射:

aj=yj,cj=Mj2,dj=Mj+1−Mj6hj,bj=yj+1−yjhj−2Mj+Mj+16hj.a_j = y_j, \quad c_j = \frac{M_j}{2}, \quad d_j = \frac{M_{j+1} - M_j}{6 h_j}, \quad b_j = \frac{y_{j+1} - y_j}{h_j} - \frac{2 M_j + M_{j+1}}{6} h_j.

将三弯矩方程两端同除以 33,即严格等价于教材中关于未知量 cjc_j 的三对角方程组。

这个交互图需要启用 JavaScript。

插值方法综合决策对比

至此,我们已经建立了完整的插值知识谱系:

插值方法所需输入数据多项式次数全局光滑度误差收敛速度局部敏感性与稳定性
Lagrange / Newton离散采样值 f(xi)f(x_i)nn(全局)C∞C^\infty视情况而定(等距网格易发散)全局刚性:单点扰动影响全域波形
Chebyshev 插值Chebyshev 根采样值nn(全局)C∞C^\infty解析函数下呈几何级快速收敛全局刚性:需要自由决定节点位置
Hermite 插值采样值 f(xi)f(x_i) 与导数 f′(xi)f'(x_i)2n+12n + 1(全局)C∞C^\infty局部误差 O(h2n+2)\mathcal{O}(h^{2n+2})全局刚性:锁定切线但全局阶数剧增
分段线性插值离散采样值 f(xi)f(x_i)11(局部)C0C^0O(h2)\mathcal{O}(h^2),精确常数为 1/81/8严格局部:扰动仅波及相邻两个分段
分段二次插值采样值及区间中点值22(局部)C0C^0O(h3)\mathcal{O}(h^3)严格局部:接缝处仍有明显折角
固支三次样条采样值及两端切线斜率33(局部段)C2C^2全局一致 O(h4)\mathcal{O}(h^4) 四阶收敛局部指数衰减:扰动随距离快速衰减
自然三次样条采样值及 S′′(a)=S′′(b)=0S''(a)=S''(b)=033(局部段)C2C^2曲率失配时为 O(h2)\mathcal{O}(h^2),否则四阶局部指数衰减:端点无曲率弯矩

三次样条打破了全局高次多项式的垄断,在 C2C^2 的优异光滑度、线性的 O(n)\mathcal{O}(n) 求解效率以及稳健的局部控制之间取得了平衡,成为工业造型、航迹规划与科学仿真的黄金标准。

参考文献

  1. [1] R. L. Burden and J. D. Faires, Numerical Analysis, 9th ed. Brooks/Cole, Cengage Learning, 2011. a b
  2. [2] M. U. School of Mathematics, “MTH2051: Introduction to Computational Mathematics: Course Lecture Notes and Study Workbooks,” 2026. Monash University course materials and study workbooks, Semester 2, 2026. ↩