分段插值

高次多项式插值的局限性

收敛性差(Runge现象)

以函数 f(x)=11+x2(x[5,5])f(x) = \frac{1}{1+x^2} \, (x \in [-5,5]) 为例,在等距节点上构造插值多项式 Ln(x)L_n(x),其收敛性表现为:

limnLn(x)={f(x),xc(c3.63)不收敛,x>c\lim_{n \to \infty} L_n(x) = \begin{cases} -f(x), & |x| \leq c \, (c \approx 3.63) \\ \text{不收敛}, & |x| > c \end{cases}

这表明高次多项式插值可能在某些区域发散,无法保证全局逼近效果。

保凸性差与数值不稳定性

  • 多余拐点:插值多项式可能出现违背原始数据单调性或凸性的振荡。
  • 误差传播:单个节点的函数值误差会影响整个区间的插值结果,导致病态问题。

分段线性插值

基本思想

将相邻数据点用直线连接,形成分段一次多项式函数。给定节点 x0<x1<<xnx_0 < x_1 < \dots < x_n 及对应函数值 f0,f1,,fnf_0, f_1, \dots, f_n,分段线性插值函数 Ih(x)I_h(x) 的表达式为:

Ih(x)=j=0nfjlj(x)I_h(x) = \sum_{j=0}^n f_j l_j(x)

其中基函数 lj(x)l_j(x) 定义为:

lj(x)={xxj1xjxj1,x[xj1,xj](j0)xxj+1xjxj+1,x[xj,xj+1](jn)0,其他区域l_j(x) = \begin{cases} \frac{x - x_{j-1}}{x_j - x_{j-1}}, & x \in [x_{j-1}, x_j] \, (j \neq 0) \\ \frac{x - x_{j+1}}{x_j - x_{j+1}}, & x \in [x_j, x_{j+1}] \, (j \neq n) \\ 0, & \text{其他区域} \end{cases}

误差估计与收敛性

插值误差由 Lagrange 余项给出:

f(x)Ih(x)M28h2|f(x) - I_h(x)| \leq \frac{M_2}{8} h^2

其中 M2=maxf(x)M_2 = \max |f''(x)|hh 为最大区间长度。若 f(x)C2[a,b]f(x) \in C^2[a,b],则当 h0h \to 0 时,Ih(x)I_h(x) 一致收敛于 f(x)f(x)

分段埃尔米特(Hermite)插值

整体思想

在节点处同时插值函数值和导数值,构造光滑性更高的分段多项式。对于节点 x0,x1,,xnx_0, x_1, \dots, x_n,要求插值多项式 H(x)H(x) 满足:

H(xi)=f(xi),H(xi)=f(xi)H(x_i) = f(x_i), \quad H'(x_i) = f'(x_i)

其一般形式为:

H2n+1(x)=j=0n[fjαj(x)+fjβj(x)]H_{2n+1}(x) = \sum_{j=0}^n \left[ f_j \alpha_j(x) + f_j' \beta_j(x) \right]

基函数 αj(x)\alpha_j(x)βj(x)\beta_j(x) 需满足:

αj(xi)=δij,αj(xi)=0;βj(xi)=0,βj(xi)=δij\alpha_j(x_i) = \delta_{ij}, \quad \alpha_j'(x_i) = 0; \quad \beta_j(x_i) = 0, \quad \beta_j'(x_i) = \delta_{ij}

两点三次埃尔米特插值

在子区间 [xk,xk+1][x_k, x_{k+1}] 上,三次 Hermite 插值多项式为:

H3(x)=fkα~k(x)+fk+1α~k+1(x)+fkβ~k(x)+fk+1β~k+1(x)H_3(x) = f_k \tilde{\alpha}_k(x) + f_{k+1} \tilde{\alpha}_{k+1}(x) + f_k' \tilde{\beta}_k(x) + f_{k+1}' \tilde{\beta}_{k+1}(x)

其中基函数的具体形式为:

α~k(x)=(1+2xxkxk+1xk)(xxk+1xkxk+1)2,β~k(x)=(xxk)(xxk+1xkxk+1)2.\begin{aligned} \tilde{\alpha}_k(x) &= \left( 1 + 2 \frac{x - x_k}{x_{k+1} - x_k} \right) \left( \frac{x - x_{k+1}}{x_k - x_{k+1}} \right)^2, \\ \tilde{\beta}_k(x) &= (x - x_k) \left( \frac{x - x_{k+1}}{x_k - x_{k+1}} \right)^2. \end{aligned}

该插值函数在节点处一阶导数连续(C1C^1 光滑),且全局收敛。

保形分段插值(Shape-Preserving)

核心思想

通过自动设定节点导数值,使分段 Hermite 插值既保持光滑性,又保留原始数据的单调性与凸性。

导数值设定方法

  • 计算割线斜率:对节点 xkx_k,计算相邻差商:

    dk1=f(xk)f(xk1)xkxk1,dk=f(xk+1)f(xk)xk+1xkd_{k-1} = \frac{f(x_k) - f(x_{k-1})}{x_k - x_{k-1}}, \quad d_k = \frac{f(x_{k+1}) - f(x_k)}{x_{k+1} - x_k}

  • 导数值规则:
    • dk1dk0d_{k-1} \cdot d_k \leq 0,令 fk=0f_k' = 0(避免振荡);
    • 否则,采用加权调和平均:

      wk1+wkfk=wk1dk1+wkdk\frac{w_{k-1} + w_k}{f_k'} = \frac{w_{k-1}}{d_{k-1}} + \frac{w_k}{d_k}

    其中权重 wkw_k 通常取区间长度。

样条插值

1. 核心动机

  • 分段插值的不足:分段线性插值(C0C^0 连续)和分段 Hermite 插值(C1C^1 连续)的二阶导数不连续,导致曲线光滑性不足。
  • 物理背景:样条(spline)源于工程师绘图时使用的弹性木条,通过固定节点形成光滑曲线。物理上,样条的势能最小化要求曲线二阶导数连续(C2C^2 光滑)。

三次样条插值

三次样条插值函数

定义 6.8:给定插值节点 x0<x1<<xn[a,b]x_0 < x_1 < \dots < x_n \in [a, b],若函数 S(x)S(x) 满足:

  1. 在每个子区间 [xj,xj+1][x_j, x_{j+1}] 上为三次多项式;
  2. 整体二阶导数连续(S(x)C2[a,b]S(x) \in C^2[a, b]);
  3. 插值条件 S(xj)=f(xj)S(x_j) = f(x_j),则称 S(x)S(x) 为三次样条插值函数。

基本形式

三次样条函数 S(x)S(x) 的分段表达式为:

S(x)={s0(x),x[x0,x1]s1(x),x[x1,x2]sn1(x),x[xn1,xn]S(x) = \begin{cases} s_0(x), & x \in [x_0, x_1] \\ s_1(x), & x \in [x_1, x_2] \\ \vdots \\ s_{n-1}(x), & x \in [x_{n-1}, x_n] \end{cases}

其中每段 sj(x)s_j(x) 为三次多项式,满足:

sj(xj)=fj,sj(xj+1)=fj+1,sj1(xj)=sj(xj),sj1(xj)=sj(xj)s_j(x_j) = f_j, \quad s_j(x_{j+1}) = f_{j+1}, \quad s'_{j-1}(x_j) = s'_j(x_j), \quad s''_{j-1}(x_j) = s''_j(x_j)

以二阶导数为参数的构造方法

假设 S(xj)=MjS''(x_j) = M_j,在子区间 [xj,xj+1][x_j, x_{j+1}] 上,二阶导数为一次多项式:

S(x)=Mjxj+1xhj+Mj+1xxjhj,hj=xj+1xjS''(x) = M_j \frac{x_{j+1} - x}{h_j} + M_{j+1} \frac{x - x_j}{h_j}, \quad h_j = x_{j+1} - x_j

两次积分后得到 S(x)S(x) 的表达式:

S(x)=Mj(xj+1x)36hj+Mj+1(xxj)36hj+(fjMjhj26)xj+1xhj+(fj+1Mj+1hj26)xxjhjS(x) = M_j \frac{(x_{j+1} - x)^3}{6h_j} + M_{j+1} \frac{(x - x_j)^3}{6h_j} + \left( f_j - \frac{M_j h_j^2}{6} \right) \frac{x_{j+1} - x}{h_j} + \left( f_{j+1} - \frac{M_{j+1} h_j^2}{6} \right) \frac{x - x_j}{h_j}

通过一阶导数连续条件和边界条件,最终得到关于 MjM_j 的线性方程组。

边界条件的类型与处理

为唯一确定三次样条插值函数,需补充两个额外条件:

第一类边界条件(固定斜率)

给定端点处一阶导数:

S(x0)=f0,S(xn)=fnS'(x_0) = f_0', \quad S'(x_n) = f_n'

第二类边界条件(自然样条)

给定端点处二阶导数(通常取零):

S(x0)=f0=0,S(xn)=fn=0S''(x_0) = f_0'' = 0, \quad S''(x_n) = f_n'' = 0

第三类边界条件(周期性)

假设函数为周期函数,周期为 xnx0x_n - x_0,要求:

S(x0)=S(xn),S(x0)=S(xn)S'(x_0) = S'(x_n), \quad S''(x_0) = S''(x_n)

第四类边界条件(Not-a-Knot)

强制首尾两个子区间为同一三次多项式,Matlab spline 函数默认采用此条件。

求解三弯矩方程

通过边界条件和导数连续性,可建立关于 MjM_j 的三对角线性方程组:

{μjMj1+2Mj+λjMj+1=dj(j=1,,n1)边界条件对应的方程\begin{cases} \mu_j M_{j-1} + 2M_j + \lambda_j M_{j+1} = d_j & (j = 1, \dots, n-1) \\ \text{边界条件对应的方程} \end{cases}

其中系数矩阵严格对角占优,保证解的存在唯一性。解出 MjM_j 后代入分段表达式即得三次样条插值函数。

B-样条函数简介

基本概念

  • k次样条函数:具有 k1k-1 阶连续导数的分段k次多项式。
  • B-样条基函数:局部非零的分段多项式基函数,广泛应用于计算机图形学、几何建模和微分方程数值解。

典型应用

  • 1次B-样条:等价于分段线性函数。
  • 3次B-样条:光滑性高,适合复杂曲线建模。

分段插值
https://xiao-ao-jiang-hu.github.io/2025/05/27/numerical-analysis/numerical-analysis6/
作者
wst
发布于
2025年5月27日
许可协议