Rigel's site

Back

Hermite 插值多项式#

三次 Hermite 插值#

给定两个节点 x0,x1x_0, x_1,我们需要构造一个三次多项式 H3(x)H_3(x),使其满足以下 4 个条件:

  • 函数值条件H3(x0)=y0,H3(x1)=y1H_3(x_0) = y_0, \quad H_3(x_1) = y_1
  • 导数值条件H3(x0)=m0,H3(x1)=m1H_3'(x_0) = m_0, \quad H_3'(x_1) = m_1

为了表达 H3(x)H_3(x),我们构造四种基函数 α0(x),α1(x),β0(x),β1(x)\alpha_0(x), \alpha_1(x), \beta_0(x), \beta_1(x),它们的取值特性如下表:

基函数x0x_0 处的函数值x1x_1 处的函数值x0x_0 处的导数值x1x_1 处的导数值
α0(x)\alpha_0(x)1000
α1(x)\alpha_1(x)0100
β0(x)\beta_0(x)0010
β1(x)\beta_1(x)0001

最终结构H3(x)=y0α0(x)+y1α1(x)+m0β0(x)+m1β1(x)H_3(x) = y_0 \alpha_0(x) + y_1 \alpha_1(x) + m_0 \beta_0(x) + m_1 \beta_1(x)

构造:

  • 函数值基函数α0(x)=(1+2(xx0)x1x0)[xx1x0x1]2\alpha_0(x) = \left( 1 + \frac{2(x - x_0)}{x_1 - x_0} \right) \left[ \frac{x - x_1}{x_0 - x_1} \right]^2 α1(x)=(1+2(xx1)x0x1)[xx0x1x0]2\alpha_1(x) = \left( 1 + \frac{2(x - x_1)}{x_0 - x_1} \right) \left[ \frac{x - x_0}{x_1 - x_0} \right]^2
  • 导数值基函数β0(x)=(xx0)[xx1x0x1]2\beta_0(x) = (x - x_0) \left[ \frac{x - x_1}{x_0 - x_1} \right]^2 β1(x)=(xx1)[xx0x1x0]2\beta_1(x) = (x - x_1) \left[ \frac{x - x_0}{x_1 - x_0} \right]^2

f(x)C4[a,b]f(x) \in C^4[a, b] 时,三次 Hermite 插值的阶段误差为:

R(x)=f(x)H3(x)=f(4)(ξ)4!(xx0)2(xx1)2,ξ(a,b)R(x) = f(x) - H_3(x) = \frac{f^{(4)}(\xi)}{4!} (x - x_0)^2 (x - x_1)^2, \quad \xi \in (a, b)

一般形式的 Hermite 插值#

给定 n+1n+1 个相异节点 x0,x1,,xnx_0, x_1, \dots, x_n,构造一个 2n+12n+1 次多项式 H2n+1(x)H_{2n+1}(x),使其满足: H2n+1(xi)=f(xi),H2n+1(xi)=f(xi)(i=0,1,,n)H_{2n+1}(x_i) = f(x_i), \quad H'_{2n+1}(x_i) = f'(x_i) \quad (i=0, 1, \dots, n)

公式结构为: H2n+1(x)=i=0n[ai(x)f(xi)+βi(x)f(xi)]H_{2n+1}(x) = \sum_{i=0}^{n} [a_i(x) f(x_i) + \beta_i(x) f'(x_i)]

利用 Lagrange 插值基函数 li(x)l_i(x) 及其导数 li(xi)l'_i(x_i) 进行构造。

  • 函数值基函数 αi(x)\alpha_i(x)αi(x)=(ax+b)li2(x)\alpha_i(x) = (ax + b)l_i^2(x),通过满足条件 αi(xi)=1\alpha_i(x_i)=1αi(xi)=0\alpha'_i(x_i)=0,求得系数:

    • 表达式αi(x)=[12li(xi)(xxi)]li2(x)\alpha_i(x) = [1 - 2l'_i(x_i)(x - x_i)]l_i^2(x)
    • 其中 li(xi)=j=0,jin1xixjl'_i(x_i) = \sum_{j=0, j \neq i}^{n} \frac{1}{x_i - x_j}
  • 导数值基函数 βi(x)\beta_i(x)βi(x)=C(xxi)li2(x)\beta_i(x) = C(x - x_i)l_i^2(x),通过满足条件 βi(xi)=1\beta'_i(x_i)=1,求得 C=1C=1

    • 表达式βi(x)=(xxi)li2(x)\beta_i(x) = (x - x_i)l_i^2(x)

f(x)C(2n+2)[a,b]f(x) \in C^{(2n+2)}[a, b],则对于任意 x[a,b]x \in [a, b],存在 ξ(a,b)\xi \in (a, b) 使得插值余项为:

R2n+1(x)=f(x)H2n+1(x)=f(2n+2)(ξ)(2n+2)!(xx0)2(xx1)2(xxn)2=f(2n+2)(ξ)(2n+2)!ωn+12(x)\begin{aligned} R_{2n+1}(x) &= f(x) - H_{2n+1}(x) \\ &= \frac{f^{(2n+2)}(\xi)}{(2n+2)!} (x - x_0)^2 (x - x_1)^2 \dots (x - x_n)^2 \\ &= \frac{f^{(2n+2)}(\xi)}{(2n+2)!} \omega_{n+1}^2(x) \end{aligned}

分段低次插值#

龙格现象#

考察函数 f(x)=11+x2f(x) = \frac{1}{1+x^2} 在区间 [5,5][-5, 5] 上的插值。

  • 现象描述:随着插值节点数 nn 的增大(多项式次数升高),插值多项式 Ln(x)L_n(x) 仅在区间中心附近收敛。在端点附近,多项式会出现剧烈的抖动(摆动),误差反而迅速增大。

  • 本质:高次多项式对局部数据的变化过于敏感,容易在边缘产生不稳定的震荡。

除了龙格现象外,高次插值还存在以下问题:

  1. 计算量大:插值次数越高,公式越复杂,计算工作量呈指数级增长。
  2. 误差积累:高次多项式的每一项系数计算都涉及多次乘除,舍入误差容易堆积。

分段线性插值#

给定区间 [a,b][a, b] 上的节点 a=x0<x1<<xn=ba = x_0 < x_1 < \dots < x_n = b 及其函数值 f(xi)=yif(x_i) = y_i分段线性插值函数 Ih(x)I_h(x) 满足:

  1. Ih(x)C[a,b]I_h(x) \in C[a, b](在整个区间上连续)。
  2. 在每个小区间 [xi,xi+1][x_i, x_{i+1}] 上,Ih(x)I_h(x) 是一个线性多项式(一次函数)。
  3. 满足插值条件:Ih(xi)=yi(i=0,1,,n)I_h(x_i) = y_i \quad (i=0, 1, \dots, n)

在每个局部区间 [xi,xi+1][x_i, x_{i+1}] 上,利用 Lagrange 一次插值公式:

Ih(x)=xxi+1xixi+1yi+xxixi+1xiyi+1,x[xi,xi+1]I_h(x) = \frac{x - x_{i+1}}{x_i - x_{i+1}} y_i + \frac{x - x_i}{x_{i+1} - x_i} y_{i+1}, \quad x \in [x_i, x_{i+1}]

fC2[a,b]f \in C^2[a, b]Ih(x)I_h(x)f(x)f(x) 的分段线性插值多项式,则对于 x[xi,xi+1]x \in [x_i, x_{i+1}],其误差为:

f(x)Ih(x)M28(xi+1xi)2|f(x) - I_h(x)| \leqslant \frac{M_2}{8} (x_{i+1} - x_i)^2

其中 M2=maxaxbf(x)M_2 = \max_{a \leqslant x \leqslant b} |f''(x)|

若记最大步长 h=maxi(xi+1xi)h = \max_i (x_{i+1} - x_i),则全区间上的误差界为:

fIh=maxaxbf(x)Ih(x)M28h2\|f - I_h\|_\infty = \max_{a \leqslant x \leqslant b} |f(x) - I_h(x)| \leqslant \frac{M_2}{8} h^2

分段三次 Hermite 插值#

添加一阶导数插值条件,用来克服分段线性插值在节点处不可导(有尖角)的问题。

已知节点 x0,x1,,xnx_0, x_1, \dots, x_n 及其对应的函数值 yky_k导数值 mkm_k。 若函数 Ih(x)I_h(x) 满足:

  1. 一阶连续Ih(x)C1[a,b]I_h(x) \in C^1[a, b](不仅曲线连续,切线也连续)。
  2. 完全匹配Ih(xk)=fk,Ih(xk)=mkI_h(x_k) = f_k, \quad I'_h(x_k) = m_k
  3. 分段三次:在每个小区间 [xk,xk+1][x_k, x_{k+1}] 上,Ih(x)I_h(x) 是一个三次多项式。

在单个区间 [xk,xk+1][x_k, x_{k+1}] 上,利用局部基函数构造:

Ih(x)=ykαk(x)+yk+1αk+1(x)+mkβk(x)+mk+1βk+1(x)I_h(x) = y_k \alpha_k(x) + y_{k+1} \alpha_{k+1}(x) + m_k \beta_k(x) + m_{k+1} \beta_{k+1}(x)
  • 函数值基函数
αk(x)=(1+2xxkxk+1xk)(xxk+1xkxk+1)2\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 αk+1(x)=(1+2xk+1xxk+1xk)(xxkxk+1xk)2\alpha_{k+1}(x) = \left( 1 + 2\frac{x_{k+1} - x}{x_{k+1} - x_k} \right) \left( \frac{x - x_k}{x_{k+1} - x_k} \right)^2
  • 导数值基函数
βk(x)=(xxk)(xxk+1xkxk+1)2\beta_k(x) = (x - x_k) \left( \frac{x - x_{k+1}}{x_k - x_{k+1}} \right)^2 βk+1(x)=(xxk+1)(xxkxk+1xk)2\beta_{k+1}(x) = (x - x_{k+1}) \left( \frac{x - x_k}{x_{k+1} - x_k} \right)^2

与分段线性插值类似,全区间上的函数可以表示为:

Ih(x)=i=0n[fiαi(x)+miβi(x)]I_h(x) = \sum_{i=0}^{n} [f_i \alpha_i(x) + m_i \beta_i(x)]

f(x)C4[a,b]f(x) \in C^4[a, b],记 M4=maxf(4)(x)M_4 = \max |f^{(4)}(x)|,则误差界为:

f(x)Ih(x)h4384M4|f(x) - I_h(x)| \leqslant \frac{h^4}{384} M_4

三次样条插值#

定义#

若函数 S(x)S(x) 满足以下三个条件,则称其为三次样条插值函数:

  1. 二阶连续性S(x)C2[a,b]S(x) \in C^2[a, b],即在整个区间上具有连续的一阶和二阶导数(曲线非常光滑)。
  2. 插值性S(xk)=fk,k=0,1,,nS(x_k) = f_k, \quad k=0, 1, \dots, n
  3. 分段三次:在每个小区间 [xk,xk+1][x_k, x_{k+1}] 上,S(x)S(x) 是一个三次多项式。

相比分段三次 Hermite 插值,样条插值不需要知道原函数的导数值,它通过自身的平滑要求(二阶导数连续)自动计算出所需的导数。

自由度分析#

nn 个小区间上,每个区间有 4 个系数 (ak,bk,ck,dk)(a_k, b_k, c_k, d_k),总共有 4n4n 个待定系数

约束条件统计:

  • 内部节点连续性:在 n1n-1 个内部节点处,函数值、一阶导、二阶导均需连续,共 3(n1)3(n-1) 个条件。
  • 插值条件n+1n+1 个节点处必须经过已知点,共 n+1n+1 个条件。
  • 总计条件数3n3+n+1=4n23n - 3 + n + 1 = 4n - 2 个。

方程数比未知数少 2 个,因此必须额外补充 2 个边界条件 才能得到唯一解。

类型边界条件名称具体描述公式表达
(a)固支边界已知两端点的一阶导数(斜率)。S(x0)=f0, S(xn)=fnS'(x_0) = f'_0, \ S'(x_n) = f'_n
(b)简支边界已知两端点的二阶导数(弯矩)。S(x0)=f0, S(xn)=fnS''(x_0) = f''_0, \ S''(x_n) = f''_n
(c)周期边界首尾节点的函数值及各阶导数相等。S(i)(x0)=S(i)(xn), i=0,1,2S^{(i)}(x_0) = S^{(i)}(x_n), \ i=0, 1, 2

给定区间 [a,b][a, b] 上的函数值及上述任一种边界条件,则在全区间上存在唯一的三次样条插值函数 S(x)S(x)

三弯矩法#

三次样条函数 S(x)S(x) 的表达式有多种形式,但在实际计算中,使用二阶导数值 S(xi)=Mi (i=0,1,,n)S''(x_i) = M_i \ (i=0, 1, \dots, n) 来表示更为方便。

  • 力学解释MiM_i 在物理上可以解释为细梁在节点 xix_i 处的弯矩(Bending Moment)。
  • 算法名称:由于推导出的方程组中,每一个点的弯矩只与相邻的两个弯矩有关(形成三对角关系),故称为三弯矩算法
数值分析-函数的多项式插值(下)
https://astro-pure.js.org/blog/numerical-analysis-notes/03
Author Rigel
Published at 2026年3月22日
Comment seems to stuck. Try to refresh?✨