在多项式插值 中,曲线仅受限于离散点的位置值:P n ( x i ) = y i P_n(x_i) = y_i P n ( x i ) = y i 。
但在力学系统、航迹规划与机器人控制中,传感器往往同时记录了位置坐标与运动速度:
f ( x i ) = y i 以及 f ′ ( x i ) = y i ′ . f(x_i) = y_i \quad \text{以及} \quad f'(x_i) = y'_i. f ( x i ) = y i 以及 f ′ ( x i ) = y i ′ .
若仍采用普通的点值插值,生成的多项式虽然能够穿过各个路标,却会对各点的切线朝向视而不见,容易在采样点之间诱发不自然的剧烈摆动。
Hermite 插值 将导数约束直接纳入多项式求解框架[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. :
Hermite 插值问题 :在 P 2 n + 1 P_{2n+1} P 2 n + 1 空间中匹配 2 ( n + 1 ) 2(n+1) 2 ( n + 1 ) 个数值与导数条件;
存在唯一性定理 :利用代数双重根因式分解证明唯一性,通过秩零化度定理证明双射存在;
基函数解耦哲学 :利用平方 Lagrange 基(ℓ i ( x ) 2 \ell_i(x)^2 ℓ i ( x ) 2 )消除不同节点间的导数串扰;
误差余项与切触几何 :证明平方节点乘积项 ∏ ( x − x i ) 2 \prod (x - x_i)^2 ∏ ( x − x i ) 2 ,揭示误差曲线在节点处的二阶相切特征;
重节点差商形式 :将差商递归拓展到重节点,规避浮点接近判断陷阱;
不完全条件与密切插值 :建立从离散插值向 Taylor 展开的渐进过渡。
Hermite 插值问题定义
定义 Hermite 插值多项式
设 a < b a < b a < b ,f ∈ C 1 ( [ a , b ] ) f \in C^1([a, b]) f ∈ C 1 ([ a , b ]) ,且 x 0 , x 1 , … , x n x_0, x_1, \dots, x_n x 0 , x 1 , … , x n 为闭区间 [ a , b ] [a, b] [ a , b ] 内的 n + 1 n+1 n + 1 个两两互异节点。Hermite 插值多项式即为满足如下条件的多项式 H 2 n + 1 ∈ P 2 n + 1 H_{2n+1} \in P_{2n+1} H 2 n + 1 ∈ P 2 n + 1 :
H 2 n + 1 ( x i ) = f ( x i ) 且 H 2 n + 1 ′ ( x i ) = f ′ ( x i ) , i = 0 , 1 , … , n . H_{2n+1}(x_i) = f(x_i) \quad \text{且} \quad H'_{2n+1}(x_i) = f'(x_i), \quad i = 0, 1, \dots, n. H 2 n + 1 ( x i ) = f ( x i ) 且 H 2 n + 1 ′ ( x i ) = f ′ ( x i ) , i = 0 , 1 , … , n . 这里 P m P_m P m 表示次数不超过 m m m 的实多项式空间,其维数为 dim ( P m ) = m + 1 \dim(P_m) = m+1 dim ( P m ) = m + 1 。
对约束条件进行维数核对:
共有 n + 1 n+1 n + 1 个独立节点;
每个节点提供 2 个标量方程(1 个函数值,1 个一阶导数值);
总约束方程数为 N = 2 ( n + 1 ) = 2 n + 2 N = 2(n+1) = 2n + 2 N = 2 ( n + 1 ) = 2 n + 2 ;
能够保证线性方程组对于任意右端项均有唯一解的多项式空间,其维数需为 2 n + 2 2n + 2 2 n + 2 ,对应多项式的最高次数为 d = N − 1 = 2 n + 1 d = N - 1 = 2n + 1 d = N − 1 = 2 n + 1 。
存在与唯一性定理
维数吻合并不等价于线性方程组必定满秩可解。以下利用多项式重根性质给出严密的唯一性与存在性证明。
定理 Hermite 插值的存在唯一性
在定义 1 的假设下,在多项式空间 P 2 n + 1 P_{2n+1} P 2 n + 1 中存在且仅存在一个多项式 H 2 n + 1 H_{2n+1} H 2 n + 1 ,同时满足全部 2 n + 2 2n+2 2 n + 2 个数值与导数条件。
证明
唯一性证明(双重根因式分解) :设有两个多项式 H 1 , H 2 ∈ P 2 n + 1 H_1, H_2 \in P_{2n+1} H 1 , H 2 ∈ P 2 n + 1 均满足上述 Hermite 条件:
H 1 ( x i ) = H 2 ( x i ) = f ( x i ) 且 H 1 ′ ( x i ) = H 2 ′ ( x i ) = f ′ ( x i ) , i = 0 , 1 , … , n . H_1(x_i) = H_2(x_i) = f(x_i) \quad \text{且} \quad H'_1(x_i) = H'_2(x_i) = f'(x_i), \quad i = 0, 1, \dots, n. H 1 ( x i ) = H 2 ( x i ) = f ( x i ) 且 H 1 ′ ( x i ) = H 2 ′ ( x i ) = f ′ ( x i ) , i = 0 , 1 , … , n . 定义差多项式 Q ( x ) = H 1 ( x ) − H 2 ( x ) Q(x) = H_1(x) - H_2(x) Q ( x ) = H 1 ( x ) − H 2 ( x ) 。由于 P 2 n + 1 P_{2n+1} P 2 n + 1 是线性空间,故 Q ∈ P 2 n + 1 Q \in P_{2n+1} Q ∈ P 2 n + 1 ,其次数不超过 2 n + 1 2n+1 2 n + 1 (或 Q ≡ 0 Q \equiv 0 Q ≡ 0 )。
在每个节点 x i x_i x i 处计算 Q Q Q 及其导数的取值:
Q ( x i ) = H 1 ( x i ) − H 2 ( x i ) = f ( x i ) − f ( x i ) = 0 , Q ′ ( x i ) = H 1 ′ ( x i ) − H 2 ′ ( x i ) = f ′ ( x i ) − f ′ ( x i ) = 0. \begin{aligned}
Q(x_i) &= H_1(x_i) - H_2(x_i) = f(x_i) - f(x_i) = 0, \\
Q'(x_i) &= H'_1(x_i) - H'_2(x_i) = f'(x_i) - f'(x_i) = 0.
\end{aligned} Q ( x i ) Q ′ ( x i ) = H 1 ( x i ) − H 2 ( x i ) = f ( x i ) − f ( x i ) = 0 , = H 1 ′ ( x i ) − H 2 ′ ( x i ) = f ′ ( x i ) − f ′ ( x i ) = 0. 由多项式因式定理,可微多项式若在某点同时满足函数值与导数值归零,则该点必为多项式的至少二重根(重数 ≥ 2 \ge 2 ≥ 2 )。因此,( x − x i ) 2 (x - x_i)^2 ( x − x i ) 2 必为 Q ( x ) Q(x) Q ( x ) 的因子。
由于各节点 x 0 , x 1 , … , x n x_0, x_1, \dots, x_n x 0 , x 1 , … , x n 两两互异,多项式因式 ( x − x 0 ) 2 , … , ( x − x n ) 2 (x - x_0)^2, \dots, (x - x_n)^2 ( x − x 0 ) 2 , … , ( x − x n ) 2 两两互素。它们的乘积必须整除 Q ( x ) Q(x) Q ( x ) :
∏ i = 0 n ( x − x i ) 2 ∣ Q ( x ) ⟹ Q ( x ) = g ( x ) ∏ i = 0 n ( x − x i ) 2 , \prod_{i=0}^n (x - x_i)^2 \;\Big|\; Q(x) \implies Q(x) = g(x) \prod_{i=0}^n (x - x_i)^2, i = 0 ∏ n ( x − x i ) 2 Q ( x ) ⟹ Q ( x ) = g ( x ) i = 0 ∏ n ( x − x i ) 2 , 其中 g ( x ) g(x) g ( x ) 为某个多项式。
分析次数关系:
乘积因子的次数为 ∑ i = 0 n 2 = 2 ( n + 1 ) = 2 n + 2 \sum_{i=0}^n 2 = 2(n + 1) = 2n + 2 ∑ i = 0 n 2 = 2 ( n + 1 ) = 2 n + 2 ;
若 Q ( x ) ≢ 0 Q(x) \not\equiv 0 Q ( x ) ≡ 0 ,则 deg Q = deg g + ( 2 n + 2 ) ≥ 2 n + 2 \deg Q = \deg g + (2n + 2) \ge 2n + 2 deg Q = deg g + ( 2 n + 2 ) ≥ 2 n + 2 ;
然而空间条件限制 deg Q ≤ 2 n + 1 \deg Q \le 2n + 1 deg Q ≤ 2 n + 1 。
不等式 2 n + 2 ≤ deg Q ≤ 2 n + 1 2n + 2 \le \deg Q \le 2n + 1 2 n + 2 ≤ deg Q ≤ 2 n + 1 产生矛盾。因此假设不成立,必有 Q ( x ) ≡ 0 Q(x) \equiv 0 Q ( x ) ≡ 0 ,即 H 1 = H 2 H_1 = H_2 H 1 = H 2 。
存在性证明(线性代数同构) :定义线性算子
H : P 2 n + 1 → R 2 n + 2 , H ( p ) = ( p ( x 0 ) , p ′ ( x 0 ) , p ( x 1 ) , p ′ ( x 1 ) , … , p ( x n ) , p ′ ( x n ) ) . \mathcal{H}: P_{2n+1} \to \mathbb{R}^{2n+2}, \quad \mathcal{H}(p) = \Big( p(x_0), p'(x_0), p(x_1), p'(x_1), \dots, p(x_n), p'(x_n) \Big). H : P 2 n + 1 → R 2 n + 2 , H ( p ) = ( p ( x 0 ) , p ′ ( x 0 ) , p ( x 1 ) , p ′ ( x 1 ) , … , p ( x n ) , p ′ ( x n ) ) . 上述唯一性结论表明,若 H ( p ) = 0 \mathcal{H}(p) = \mathbf{0} H ( p ) = 0 ,则必有 p ≡ 0 p \equiv 0 p ≡ 0 。这意味着算子的核空间是平凡的:ker ( H ) = { 0 } \ker(\mathcal{H}) = \{0\} ker ( H ) = { 0 } ,即算子是单射。
又因为两边向量空间的维数完全相等:dim ( P 2 n + 1 ) = 2 n + 2 = dim ( R 2 n + 2 ) \dim(P_{2n+1}) = 2n + 2 = \dim(\mathbb{R}^{2n+2}) dim ( P 2 n + 1 ) = 2 n + 2 = dim ( R 2 n + 2 ) ,根据线性代数中的秩零化度定理,有限维同维数空间之间的单射线性映射必然也是满射。因此 H \mathcal{H} H 是双射:对于任意给定的数据向量,在 P 2 n + 1 P_{2n+1} P 2 n + 1 中总能找到唯一原像,从而严格证明了解的存在性。
基函数构造与平方解耦机制
为了直接写出多项式解,我们尝试将插值函数按基函数展开:
H 2 n + 1 ( x ) = ∑ i = 0 n ( f ( x i ) h i ( x ) + f ′ ( x i ) h ^ i ( x ) ) . H_{2n+1}(x) = \sum_{i=0}^n \Big( f(x_i) h_i(x) + f'(x_i) \hat{h}_i(x) \Big). H 2 n + 1 ( x ) = i = 0 ∑ n ( f ( x i ) h i ( x ) + f ′ ( x i ) h ^ i ( x ) ) .
这要求每个节点配备两个基多项式:
h i ( x ) h_i(x) h i ( x ) 为数值选择子 :在 x i x_i x i 处取值为 1 1 1 、导数为 0 0 0 ;在外来节点处数值与导数皆为 0 0 0 ;
h ^ i ( x ) \hat{h}_i(x) h ^ i ( x ) 为导数选择子 :在 x i x_i x i 处取值为 0 0 0 、导数为 1 1 1 ;在外来节点处数值与导数皆为 0 0 0 。
为什么一次 Lagrange 基底失效
回顾 Lagrange 插值基 ℓ i ( x ) = ∏ j ≠ i x − x j x i − x j ∈ P n \ell_i(x) = \prod_{j \neq i} \frac{x - x_j}{x_i - x_j} \in P_n ℓ i ( x ) = ∏ j = i x i − x j x − x j ∈ P n 。虽然在外部节点处 ℓ i ( x j ) = 0 \ell_i(x_j) = 0 ℓ i ( x j ) = 0 (j ≠ i j \neq i j = i ),但其导数 ℓ i ′ ( x j ) \ell'_i(x_j) ℓ i ′ ( x j ) 通常不为零。如果直接使用 ℓ i ( x ) \ell_i(x) ℓ i ( x ) ,对一个节点导数项的修改就会干扰所有其他节点的导数,产生严重的交叉串扰。
平方因式的解耦突破
考察 Lagrange 基函数的平方项 ℓ i ( x ) 2 ∈ P 2 n \ell_i(x)^2 \in P_{2n} ℓ i ( x ) 2 ∈ P 2 n 。由链式法则:
( ℓ i 2 ) ′ ( x ) = 2 ℓ i ( x ) ℓ i ′ ( x ) . \big(\ell_i^2\big)'(x) = 2 \ell_i(x) \ell'_i(x). ( ℓ i 2 ) ′ ( x ) = 2 ℓ i ( x ) ℓ i ′ ( x ) .
在任意外部节点 x j x_j x j (j ≠ i j \neq i j = i )处代入:
函数值 :ℓ i ( x j ) 2 = 0 2 = 0 \ell_i(x_j)^2 = 0^2 = 0 ℓ i ( x j ) 2 = 0 2 = 0 ;
导数值 :( ℓ i 2 ) ′ ( x j ) = 2 ⋅ 0 ⋅ ℓ i ′ ( x j ) = 0 (\ell_i^2)'(x_j) = 2 \cdot 0 \cdot \ell'_i(x_j) = 0 ( ℓ i 2 ) ′ ( x j ) = 2 ⋅ 0 ⋅ ℓ i ′ ( x j ) = 0 。
平方运算在每个外部节点处天然制造了二阶零点 ,一举消除所有外部节点在数值与导数上的交叉串扰。
待定系数推导基函数
因为 ℓ i ( x ) 2 \ell_i(x)^2 ℓ i ( x ) 2 属于 P 2 n P_{2n} P 2 n ,乘以一次多项式 ( A ( x − x i ) + B ) (A(x - x_i) + B) ( A ( x − x i ) + B ) 后阶数刚好为 2 n + 1 2n+1 2 n + 1 ,提供 2 个自由待定参数来满足本节点 x i x_i x i 的要求。
定义 Hermite 基多项式
对每个节点 x i x_i x i (i = 0 , … , n i = 0, \dots, n i = 0 , … , n ),Hermite 基多项式显式构造为:
h i ( x ) = ( 1 − 2 ℓ i ′ ( x i ) ( x − x i ) ) ℓ i ( x ) 2 , h ^ i ( x ) = ( x − x i ) ℓ i ( x ) 2 . h_i(x) = \Big( 1 - 2\ell'_i(x_i)(x - x_i) \Big) \ell_i(x)^2, \quad \hat{h}_i(x) = (x - x_i) \ell_i(x)^2. h i ( x ) = ( 1 − 2 ℓ i ′ ( x i ) ( x − x i ) ) ℓ i ( x ) 2 , h ^ i ( x ) = ( x − x i ) ℓ i ( x ) 2 . 它们满足 4 个 Kronecker 选择子性质:
h i ( x j ) = δ i j , h i ′ ( x j ) = 0 , h ^ i ( x j ) = 0 , h ^ i ′ ( x j ) = δ i j . h_i(x_j) = \delta_{ij}, \quad h'_i(x_j) = 0, \quad \hat{h}_i(x_j) = 0, \quad \hat{h}'_i(x_j) = \delta_{ij}. h i ( x j ) = δ ij , h i ′ ( x j ) = 0 , h ^ i ( x j ) = 0 , h ^ i ′ ( x j ) = δ ij .
证明
记常数 c i = ℓ i ′ ( x i ) c_i = \ell'_i(x_i) c i = ℓ i ′ ( x i ) 。
推导 h i ( x ) h_i(x) h i ( x ) :
设 h i ( x ) = ( A ( x − x i ) + B ) ℓ i ( x ) 2 h_i(x) = (A(x - x_i) + B)\ell_i(x)^2 h i ( x ) = ( A ( x − x i ) + B ) ℓ i ( x ) 2 。
代入本节点值 h i ( x i ) = 1 h_i(x_i) = 1 h i ( x i ) = 1 :因为 ℓ i ( x i ) = 1 \ell_i(x_i) = 1 ℓ i ( x i ) = 1 ,有 ( A ( 0 ) + B ) ( 1 ) 2 = B = 1 (A(0) + B)(1)^2 = B = 1 ( A ( 0 ) + B ) ( 1 ) 2 = B = 1 。
求导:h i ′ ( x ) = A ℓ i ( x ) 2 + ( A ( x − x i ) + 1 ) ⋅ 2 ℓ i ( x ) ℓ i ′ ( x ) h'_i(x) = A \ell_i(x)^2 + (A(x - x_i) + 1) \cdot 2\ell_i(x)\ell'_i(x) h i ′ ( x ) = A ℓ i ( x ) 2 + ( A ( x − x i ) + 1 ) ⋅ 2 ℓ i ( x ) ℓ i ′ ( x ) 。
代入导数条件 h i ′ ( x i ) = 0 h'_i(x_i) = 0 h i ′ ( x i ) = 0 :A ( 1 ) 2 + ( 0 + 1 ) ⋅ 2 ( 1 ) ( c i ) = A + 2 c i = 0 ⟹ A = − 2 c i A(1)^2 + (0 + 1) \cdot 2(1)(c_i) = A + 2c_i = 0 \implies A = -2c_i A ( 1 ) 2 + ( 0 + 1 ) ⋅ 2 ( 1 ) ( c i ) = A + 2 c i = 0 ⟹ A = − 2 c i 。
故得 h i ( x ) = ( 1 − 2 ℓ i ′ ( x i ) ( x − x i ) ) ℓ i ( x ) 2 h_i(x) = (1 - 2\ell'_i(x_i)(x - x_i))\ell_i(x)^2 h i ( x ) = ( 1 − 2 ℓ i ′ ( x i ) ( x − x i )) ℓ i ( x ) 2 。
推导 h ^ i ( x ) \hat{h}_i(x) h ^ i ( x ) :
设 h ^ i ( x ) = ( C ( x − x i ) + D ) ℓ i ( x ) 2 \hat{h}_i(x) = (C(x - x_i) + D)\ell_i(x)^2 h ^ i ( x ) = ( C ( x − x i ) + D ) ℓ i ( x ) 2 。
代入本节点值 h ^ i ( x i ) = 0 \hat{h}_i(x_i) = 0 h ^ i ( x i ) = 0 :有 ( C ( 0 ) + D ) ( 1 ) 2 = D = 0 (C(0) + D)(1)^2 = D = 0 ( C ( 0 ) + D ) ( 1 ) 2 = D = 0 。
求导:h ^ i ′ ( x ) = C ℓ i ( x ) 2 + C ( x − x i ) ⋅ 2 ℓ i ( x ) ℓ i ′ ( x ) \hat{h}'_i(x) = C \ell_i(x)^2 + C(x - x_i) \cdot 2\ell_i(x)\ell'_i(x) h ^ i ′ ( x ) = C ℓ i ( x ) 2 + C ( x − x i ) ⋅ 2 ℓ i ( x ) ℓ i ′ ( x ) 。
代入导数条件 h ^ i ′ ( x i ) = 1 \hat{h}'_i(x_i) = 1 h ^ i ′ ( x i ) = 1 :C ( 1 ) 2 + 0 = C = 1 C(1)^2 + 0 = C = 1 C ( 1 ) 2 + 0 = C = 1 。
故得 h ^ i ( x ) = ( x − x i ) ℓ i ( x ) 2 \hat{h}_i(x) = (x - x_i)\ell_i(x)^2 h ^ i ( x ) = ( x − x i ) ℓ i ( x ) 2 。
在外来节点 x j x_j x j (j ≠ i j \neq i j = i )处,因为 ℓ i ( x j ) = 0 \ell_i(x_j) = 0 ℓ i ( x j ) = 0 且 ℓ i ( x j ) 2 = 0 \ell_i(x_j)^2 = 0 ℓ i ( x j ) 2 = 0 ,函数值与导数值均严格为零。
两点正弦插值算例
例 [0, 1] 区间上正弦函数的两点 Hermite 插值
取 f ( x ) = sin ( π x ) f(x) = \sin(\pi x) f ( x ) = sin ( π x ) ,区间为 [ 0 , 1 ] [0, 1] [ 0 , 1 ] ,节点数为 n = 1 n = 1 n = 1 (节点为 x 0 = 0 x_0 = 0 x 0 = 0 与 x 1 = 1 x_1 = 1 x 1 = 1 )。
第一步:计算节点处函数值与导数值 :
f ( 0 ) = sin ( 0 ) = 0 , f ′ ( 0 ) = π cos ( 0 ) = π , f ( 1 ) = sin ( π ) = 0 , f ′ ( 1 ) = π cos ( π ) = − π . \begin{aligned}
f(0) &= \sin(0) = 0, \quad f'(0) = \pi \cos(0) = \pi, \\
f(1) &= \sin(\pi) = 0, \quad f'(1) = \pi \cos(\pi) = -\pi.
\end{aligned} f ( 0 ) f ( 1 ) = sin ( 0 ) = 0 , f ′ ( 0 ) = π cos ( 0 ) = π , = sin ( π ) = 0 , f ′ ( 1 ) = π cos ( π ) = − π . 第二步:求出线性 Lagrange 基及导数 :
ℓ 0 ( x ) = x − 1 0 − 1 = 1 − x ⟹ ℓ 0 ′ ( 0 ) = − 1 , ℓ 1 ( x ) = x − 0 1 − 0 = x ⟹ ℓ 1 ′ ( 1 ) = 1. \ell_0(x) = \frac{x - 1}{0 - 1} = 1 - x \implies \ell'_0(0) = -1, \quad
\ell_1(x) = \frac{x - 0}{1 - 0} = x \implies \ell'_1(1) = 1. ℓ 0 ( x ) = 0 − 1 x − 1 = 1 − x ⟹ ℓ 0 ′ ( 0 ) = − 1 , ℓ 1 ( x ) = 1 − 0 x − 0 = x ⟹ ℓ 1 ′ ( 1 ) = 1. 第三步:展开四个三次基函数 :
h 0 ( x ) = ( 1 − 2 ( − 1 ) ( x − 0 ) ) ( 1 − x ) 2 = ( 1 + 2 x ) ( 1 − x ) 2 = 1 − 3 x 2 + 2 x 3 , h ^ 0 ( x ) = ( x − 0 ) ( 1 − x ) 2 = x ( 1 − x ) 2 = x − 2 x 2 + x 3 . \begin{aligned}
h_0(x) &= (1 - 2(-1)(x - 0))(1 - x)^2 = (1 + 2x)(1 - x)^2 = 1 - 3x^2 + 2x^3, \\
\hat{h}_0(x) &= (x - 0)(1 - x)^2 = x(1 - x)^2 = x - 2x^2 + x^3.
\end{aligned} h 0 ( x ) h ^ 0 ( x ) = ( 1 − 2 ( − 1 ) ( x − 0 )) ( 1 − x ) 2 = ( 1 + 2 x ) ( 1 − x ) 2 = 1 − 3 x 2 + 2 x 3 , = ( x − 0 ) ( 1 − x ) 2 = x ( 1 − x ) 2 = x − 2 x 2 + x 3 . h 1 ( x ) = ( 1 − 2 ( 1 ) ( x − 1 ) ) x 2 = ( 3 − 2 x ) x 2 = 3 x 2 − 2 x 3 , h ^ 1 ( x ) = ( x − 1 ) x 2 = x 3 − x 2 . \begin{aligned}
h_1(x) &= (1 - 2(1)(x - 1))x^2 = (3 - 2x)x^2 = 3x^2 - 2x^3, \\
\hat{h}_1(x) &= (x - 1)x^2 = x^3 - x^2.
\end{aligned} h 1 ( x ) h ^ 1 ( x ) = ( 1 − 2 ( 1 ) ( x − 1 )) x 2 = ( 3 − 2 x ) x 2 = 3 x 2 − 2 x 3 , = ( x − 1 ) x 2 = x 3 − x 2 . 第四步:线性组合装配多项式 :
H 3 ( x ) = f ( 0 ) h 0 ( x ) + f ′ ( 0 ) h ^ 0 ( x ) + f ( 1 ) h 1 ( x ) + f ′ ( 1 ) h ^ 1 ( x ) = 0 + π h ^ 0 ( x ) + 0 − π h ^ 1 ( x ) = π ( x ( 1 − x ) 2 − x 2 ( x − 1 ) ) = π x ( 1 − x ) ( ( 1 − x ) − ( − x ) ) = π x ( 1 − x ) . \begin{aligned}
H_3(x) &= f(0) h_0(x) + f'(0) \hat{h}_0(x) + f(1) h_1(x) + f'(1) \hat{h}_1(x) \\
&= 0 + \pi \hat{h}_0(x) + 0 - \pi \hat{h}_1(x) \\
&= \pi \Big( x(1 - x)^2 - x^2(x - 1) \Big) \\
&= \pi x(1 - x) \Big( (1 - x) - (-x) \Big) \\
&= \pi x (1 - x).
\end{aligned} H 3 ( x ) = f ( 0 ) h 0 ( x ) + f ′ ( 0 ) h ^ 0 ( x ) + f ( 1 ) h 1 ( x ) + f ′ ( 1 ) h ^ 1 ( x ) = 0 + π h ^ 0 ( x ) + 0 − π h ^ 1 ( x ) = π ( x ( 1 − x ) 2 − x 2 ( x − 1 ) ) = π x ( 1 − x ) ( ( 1 − x ) − ( − x ) ) = π x ( 1 − x ) . 三次项系数在此抵消,插值多项式退化为二次多项式。
对比纯值点插值:因为两端点 f ( 0 ) = f ( 1 ) = 0 f(0) = f(1) = 0 f ( 0 ) = f ( 1 ) = 0 ,普通的 Lagrange 线性多项式为割线 P 1 ( x ) ≡ 0 P_1(x) \equiv 0 P 1 ( x ) ≡ 0 ,完全丢失了正弦波隆起的特征。而 Hermite 插值准确捕捉到了端点向上 π \pi π 和向下 − π -\pi − π 的切线斜率,忠实勾勒出正弦波的穹顶曲线。
这个交互图需要启用 JavaScript。
Hermite 误差余项定理
定理 Hermite 插值误差余项公式
设 a < b a < b a < b ,f ∈ C 2 n + 2 ( [ a , b ] ) f \in C^{2n+2}([a, b]) f ∈ C 2 n + 2 ([ a , b ]) 。设 H 2 n + 1 ∈ P 2 n + 1 H_{2n+1} \in P_{2n+1} H 2 n + 1 ∈ P 2 n + 1 为在互异节点 x 0 , … , x n x_0, \dots, x_n x 0 , … , x n 处插值函数 f f f 及其导数 f ′ f' f ′ 的多项式。对区间内每个固定的点 x ∈ [ a , b ] x \in [a, b] x ∈ [ a , b ] ,存在中间点 ξ x ∈ ( a , b ) \xi_x \in (a, b) ξ x ∈ ( a , b ) 使得
f ( x ) − H 2 n + 1 ( x ) = f ( 2 n + 2 ) ( ξ x ) ( 2 n + 2 ) ! ∏ i = 0 n ( x − x i ) 2 . f(x) - H_{2n+1}(x) = \frac{f^{(2n+2)}(\xi_x)}{(2n+2)!} \prod_{i=0}^n (x - x_i)^2. f ( x ) − H 2 n + 1 ( x ) = ( 2 n + 2 )! f ( 2 n + 2 ) ( ξ x ) i = 0 ∏ n ( x − x i ) 2 .
证明
若求值点 x x x 刚好为某个节点 x i x_i x i ,两端均为零,结论显然成立。
现固定不同于任何节点的 x ∈ ( a , b ) x \in (a, b) x ∈ ( a , b ) 。定义辅助函数(自变量为 t ∈ [ a , b ] t \in [a, b] t ∈ [ a , b ] ):
ω ( t ) = ∏ i = 0 n ( t − x i ) 2 , K = f ( x ) − H 2 n + 1 ( x ) ω ( x ) , g ( t ) = f ( t ) − H 2 n + 1 ( t ) − K ω ( t ) . \omega(t) = \prod_{i=0}^n (t - x_i)^2, \quad K = \frac{f(x) - H_{2n+1}(x)}{\omega(x)}, \quad g(t) = f(t) - H_{2n+1}(t) - K \omega(t). ω ( t ) = i = 0 ∏ n ( t − x i ) 2 , K = ω ( x ) f ( x ) − H 2 n + 1 ( x ) , g ( t ) = f ( t ) − H 2 n + 1 ( t ) − K ω ( t ) . 统计 g ( t ) g(t) g ( t ) 的零点重数:
在求值点 t = x t = x t = x 处:根据常数 K K K 的定义,有 g ( x ) = 0 g(x) = 0 g ( x ) = 0 ;
在每个插值节点 x i x_i x i 处:因 f − H 2 n + 1 f - H_{2n+1} f − H 2 n + 1 和 ω \omega ω 均在节点处取值为零且导数为零,故 g ( x i ) = 0 g(x_i) = 0 g ( x i ) = 0 且 g ′ ( x i ) = 0 g'(x_i) = 0 g ′ ( x i ) = 0 。
这意味着 g ( t ) g(t) g ( t ) 在这 n + 1 n+1 n + 1 个节点处拥有二重零点,在 x x x 处拥有单零点。计入重数,g ( t ) g(t) g ( t ) 在区间内至少拥有 2 ( n + 1 ) + 1 = 2 n + 3 2(n+1) + 1 = 2n + 3 2 ( n + 1 ) + 1 = 2 n + 3 个零点。
应用广义 Rolle 定理:
求一次导后,g ′ ( t ) g'(t) g ′ ( t ) 在 n + 1 n+1 n + 1 个节点处仍保留一重零点,并在相邻各相异零点之间各产生一个导数零点,共计至少 2 n + 2 2n + 2 2 n + 2 个零点;
连续求导 2 n + 2 2n + 2 2 n + 2 次,必然能在区间内找到一点 ξ x ∈ ( a , b ) \xi_x \in (a, b) ξ x ∈ ( a , b ) 满足 g ( 2 n + 2 ) ( ξ x ) = 0 g^{(2n+2)}(\xi_x) = 0 g ( 2 n + 2 ) ( ξ x ) = 0 。
对 g ( t ) g(t) g ( t ) 连续求导 2 n + 2 2n + 2 2 n + 2 次:
H 2 n + 1 H_{2n+1} H 2 n + 1 次数至多为 2 n + 1 2n + 1 2 n + 1 ,求导后归零:H 2 n + 1 ( 2 n + 2 ) ( t ) ≡ 0 H_{2n+1}^{(2n+2)}(t) \equiv 0 H 2 n + 1 ( 2 n + 2 ) ( t ) ≡ 0 ;
乘积多项式 ω ( t ) = t 2 n + 2 + O ( t 2 n + 1 ) \omega(t) = t^{2n+2} + \mathcal{O}(t^{2n+1}) ω ( t ) = t 2 n + 2 + O ( t 2 n + 1 ) 为首一的 2 n + 2 2n+2 2 n + 2 次多项式,求导后为常数 ( 2 n + 2 ) ! (2n + 2)! ( 2 n + 2 )! 。
将中值点 ξ x \xi_x ξ x 代入:
g ( 2 n + 2 ) ( ξ x ) = f ( 2 n + 2 ) ( ξ x ) − 0 − K ( 2 n + 2 ) ! = 0 ⟹ K = f ( 2 n + 2 ) ( ξ x ) ( 2 n + 2 ) ! . g^{(2n+2)}(\xi_x) = f^{(2n+2)}(\xi_x) - 0 - K (2n + 2)! = 0 \implies K = \frac{f^{(2n+2)}(\xi_x)}{(2n + 2)!}. g ( 2 n + 2 ) ( ξ x ) = f ( 2 n + 2 ) ( ξ x ) − 0 − K ( 2 n + 2 )! = 0 ⟹ K = ( 2 n + 2 )! f ( 2 n + 2 ) ( ξ x ) . 代回最初定义的等式,即得所求误差公式。
误差接触几何:二阶相切特征
对比 Lagrange 误差公式与 Hermite 误差公式,可以看出本质差异:
Lagrange 误差项 :∏ ( x − x i ) \prod (x - x_i) ∏ ( x − x i ) 在每个节点处仅有一阶零点,误差曲线以非零斜率直接穿透横轴;
Hermite 误差项 :∏ ( x − x i ) 2 \prod (x - x_i)^2 ∏ ( x − x i ) 2 在每个节点处拥有二重零点。误差曲线在节点处与横轴相切 ,以抛物线平坦接触的方式紧贴零点。
例 误差定量估计与真值比对
以函数 f ( x ) = cos ( π x ) + x f(x) = \cos(\pi x) + x f ( x ) = cos ( π x ) + x 在 [ 0 , 1 ] [0, 1] [ 0 , 1 ] 上的两点 Hermite 插值为例,四阶导数为 f ( 4 ) ( x ) = π 4 cos ( π x ) f^{(4)}(x) = \pi^4 \cos(\pi x) f ( 4 ) ( x ) = π 4 cos ( π x ) ,其最大模长为 M 4 = π 4 M_4 = \pi^4 M 4 = π 4 。
在 x = 1 / 4 x = 1/4 x = 1/4 处,理论误差上限为:
∣ f ( 1 / 4 ) − H 3 ( 1 / 4 ) ∣ ≤ π 4 24 ( 1 / 4 ) 2 ( 1 − 1 / 4 ) 2 = 3 π 4 2048 ≈ 0.1427. |f(1/4) - H_3(1/4)| \le \frac{\pi^4}{24} (1/4)^2 (1 - 1/4)^2 = \frac{3\pi^4}{2048} \approx 0.1427. ∣ f ( 1/4 ) − H 3 ( 1/4 ) ∣ ≤ 24 π 4 ( 1/4 ) 2 ( 1 − 1/4 ) 2 = 2048 3 π 4 ≈ 0.1427. 真值计算表明:f ( 1 / 4 ) ≈ 0.9571 f(1/4) \approx 0.9571 f ( 1/4 ) ≈ 0.9571 ,H 3 ( 1 / 4 ) = 0.9375 H_3(1/4) = 0.9375 H 3 ( 1/4 ) = 0.9375 。真实绝对误差为 0.0196 0.0196 0.0196 。理论上界约为真误差的 7.3 倍,给出了可靠的保守保证。
Newton 差商形式与重节点扩展
如同 Lagrange 展开一样,当需要增加新的采样点时,重构 Hermite 基函数需要消耗 O ( n 2 ) \mathcal{O}(n^2) O ( n 2 ) 开销。能否将差商表推广到 Hermite 插值?
极限观察
回顾导数的定义:
lim ε → 0 f ( x i + ε ) − f ( x i ) ε = f ′ ( x i ) . \lim_{\varepsilon \to 0} \frac{f(x_i + \varepsilon) - f(x_i)}{\varepsilon} = f'(x_i). ε → 0 lim ε f ( x i + ε ) − f ( x i ) = f ′ ( x i ) .
当两个互异节点彼此无限靠近时,差商自然趋向于导数:
lim x i + 1 → x i f [ x i , x i + 1 ] = f ′ ( x i ) . \lim_{x_{i+1} \to x_i} f[x_i, x_{i+1}] = f'(x_i). x i + 1 → x i lim f [ x i , x i + 1 ] = f ′ ( x i ) .
这启发我们将每个 Hermite 节点在差商表中连续书写两次:
z 2 i = z 2 i + 1 = x i , i = 0 , 1 , … , n . z_{2i} = z_{2i+1} = x_i, \quad i = 0, 1, \dots, n. z 2 i = z 2 i + 1 = x i , i = 0 , 1 , … , n .
定义 重节点差商
对于重节点序列 z 0 , z 1 , … , z 2 n + 1 z_0, z_1, \dots, z_{2n+1} z 0 , z 1 , … , z 2 n + 1 ,一阶差商定义为:
f [ z i , z i + 1 ] = { f ( z i + 1 ) − f ( z i ) z i + 1 − z i , 当 z i + 1 ≠ z i , f ′ ( z i ) , 当 z i + 1 = z i . f[z_i, z_{i+1}] = \begin{cases}
\frac{f(z_{i+1}) - f(z_i)}{z_{i+1} - z_i}, & \text{当 } z_{i+1} \neq z_i, \\
f'(z_i), & \text{当 } z_{i+1} = z_i.
\end{cases} f [ z i , z i + 1 ] = { z i + 1 − z i f ( z i + 1 ) − f ( z i ) , f ′ ( z i ) , 当 z i + 1 = z i , 当 z i + 1 = z i . 当外层节点互异时,高阶差商仍沿用标准递归关系:
f [ z i , … , z i + k ] = f [ z i + 1 , … , z i + k ] − f [ z i , … , z i + k − 1 ] z i + k − z i . f[z_i, \dots, z_{i+k}] = \frac{f[z_{i+1}, \dots, z_{i+k}] - f[z_i, \dots, z_{i+k-1}]}{z_{i+k} - z_i}. f [ z i , … , z i + k ] = z i + k − z i f [ z i + 1 , … , z i + k ] − f [ z i , … , z i + k − 1 ] .
定理 Hermite 插值的 Newton 形式
利用重节点序列 z 0 , … , z 2 n + 1 z_0, \dots, z_{2n+1} z 0 , … , z 2 n + 1 ,Hermite 插值多项式可表达为:
H 2 n + 1 ( x ) = f [ z 0 ] + ∑ k = 1 2 n + 1 f [ z 0 , … , z k ] ∏ j = 0 k − 1 ( x − z j ) . H_{2n+1}(x) = f[z_0] + \sum_{k=1}^{2n+1} f[z_0, \dots, z_k] \prod_{j=0}^{k-1} (x - z_j). H 2 n + 1 ( x ) = f [ z 0 ] + k = 1 ∑ 2 n + 1 f [ z 0 , … , z k ] j = 0 ∏ k − 1 ( x − z j ) .
正弦算例的差商表求解
设 x 0 = 0 x_0 = 0 x 0 = 0 和 x 1 = 1 x_1 = 1 x 1 = 1 ,对应序列 z 0 = 0 , z 1 = 0 , z 2 = 1 , z 3 = 1 z_0 = 0, z_1 = 0, z_2 = 1, z_3 = 1 z 0 = 0 , z 1 = 0 , z 2 = 1 , z 3 = 1 。输入数据为 f ( 0 ) = 0 , f ′ ( 0 ) = π , f ( 1 ) = 0 , f ′ ( 1 ) = − π f(0) = 0, f'(0) = \pi, f(1) = 0, f'(1) = -\pi f ( 0 ) = 0 , f ′ ( 0 ) = π , f ( 1 ) = 0 , f ′ ( 1 ) = − π 。
k z k f [ z k ] 一阶差商 二阶差商 三阶差商 0 0 0 1 0 0 π ( f ′ ( 0 ) ) 2 1 0 0 − 0 1 − 0 = 0 0 − π 1 − 0 = − π 3 1 0 − π ( f ′ ( 1 ) ) − π − 0 1 − 0 = − π − π − ( − π ) 1 − 0 = 0 \begin{array}{c|c|cccc}
k & z_k & f[z_k] & \text{一阶差商} & \text{二阶差商} & \text{三阶差商} \\
\hline
0 & 0 & \mathbf{0} & & & \\
1 & 0 & 0 & \mathbf{\pi} \; (f'(0)) & & \\
2 & 1 & 0 & \frac{0 - 0}{1 - 0} = 0 & \mathbf{\frac{0 - \pi}{1 - 0} = -\pi} & \\
3 & 1 & 0 & -\pi \; (f'(1)) & \frac{-\pi - 0}{1 - 0} = -\pi & \mathbf{\frac{-\pi - (-\pi)}{1 - 0} = 0}
\end{array} k 0 1 2 3 z k 0 0 1 1 f [ z k ] 0 0 0 0 一阶差商 π ( f ′ ( 0 )) 1 − 0 0 − 0 = 0 − π ( f ′ ( 1 )) 二阶差商 1 − 0 0 − π = − π 1 − 0 − π − 0 = − π 三阶差商 1 − 0 − π − ( − π ) = 0
读取主对角线各项系数 c 0 = 0 , c 1 = π , c 2 = − π , c 3 = 0 c_0 = 0, c_1 = \pi, c_2 = -\pi, c_3 = 0 c 0 = 0 , c 1 = π , c 2 = − π , c 3 = 0 :
H 3 ( x ) = 0 + π ( x − 0 ) − π ( x − 0 ) ( x − 0 ) + 0 ( x − 0 ) 2 ( x − 1 ) = π x − π x 2 = π x ( 1 − x ) . \begin{aligned}
H_3(x) &= 0 + \pi (x - 0) - \pi (x - 0)(x - 0) + 0 (x - 0)^2 (x - 1) \\
&= \pi x - \pi x^2 = \pi x (1 - x).
\end{aligned} H 3 ( x ) = 0 + π ( x − 0 ) − π ( x − 0 ) ( x − 0 ) + 0 ( x − 0 ) 2 ( x − 1 ) = π x − π x 2 = π x ( 1 − x ) .
结果与基函数求解严格一致。
算法工程实现细节
在编写算法时,有些实现会用浮点近似 np.isclose(z[i], z[i+1]) 来判断是否为重节点。
这是一个数值隐患:当两个真实独立采样点彼此距离小于容差(例如相距 10 − 8 10^{-8} 1 0 − 8 )时,会被误判为重节点,强行调用未知的导数值而破坏计算。
工程上应当使用严格的奇偶双索引规则控制:
for i in range ( 2 * n + 1 ):
Q[i, 1 ] = df_vals[i // 2 ] # 重节点处的精确一阶导数值
Q[i, 1 ] = (Q[i + 1 , 0 ] - Q[i, 0 ]) / (z[i + 1 ] - z[i])
不完全条件与密切插值
若某些节点并未提供一阶导数,问题该如何求解?
例如只给出 3 个非平衡约束:
节点 x 1 x_1 x 1 处提供函数值与导数:H ( x 1 ) = f ( x 1 ) , H ′ ( x 1 ) = f ′ ( x 1 ) H(x_1) = f(x_1), H'(x_1) = f'(x_1) H ( x 1 ) = f ( x 1 ) , H ′ ( x 1 ) = f ′ ( x 1 ) ;
节点 x 0 x_0 x 0 处仅提供函数值:H ( x 0 ) = f ( x 0 ) H(x_0) = f(x_0) H ( x 0 ) = f ( x 0 ) 。
总约束数为 N = 3 N = 3 N = 3 ,对应的最小多项式空间为二次空间 P 2 P_2 P 2 。
将多项式在信息完备的 x 1 x_1 x 1 点按 Taylor 基展开:
H ( x ) = f ( x 1 ) + f ′ ( x 1 ) ( x − x 1 ) + a 2 ( x − x 1 ) 2 . H(x) = f(x_1) + f'(x_1)(x - x_1) + a_2 (x - x_1)^2. H ( x ) = f ( x 1 ) + f ′ ( x 1 ) ( x − x 1 ) + a 2 ( x − x 1 ) 2 .
代入 x 0 x_0 x 0 处的插值条件,立刻解出唯一系数:
a 2 = f ( x 0 ) − f ( x 1 ) − f ′ ( x 1 ) ( x 0 − x 1 ) ( x 0 − x 1 ) 2 . a_2 = \frac{f(x_0) - f(x_1) - f'(x_1)(x_0 - x_1)}{(x_0 - x_1)^2}. a 2 = ( x 0 − x 1 ) 2 f ( x 0 ) − f ( x 1 ) − f ′ ( x 1 ) ( x 0 − x 1 ) .
任何满足条件的差多项式 R ( x ) R(x) R ( x ) 必须包含因式 ( x − x 0 ) ( x − x 1 ) 2 (x - x_0)(x - x_1)^2 ( x − x 0 ) ( x − x 1 ) 2 (次数为 3),由 deg R ≤ 2 \deg R \le 2 deg R ≤ 2 强制得出 R ≡ 0 R \equiv 0 R ≡ 0 ,证明了解的唯一性。
向 Taylor 展开的渐进极限
当一个区间内的所有节点全部趋于同一个点 x 0 x_0 x 0 时,匹配 0 , 1 , … , m 0, 1, \dots, m 0 , 1 , … , m 阶导数的密切多项式便退化为经典的 Taylor 多项式 :
T m ( x ) = ∑ k = 0 m f ( k ) ( x 0 ) k ! ( x − x 0 ) k . T_m(x) = \sum_{k=0}^m \frac{f^{(k)}(x_0)}{k!} (x - x_0)^k. T m ( x ) = k = 0 ∑ m k ! f ( k ) ( x 0 ) ( x − x 0 ) k .
因此,Taylor 多项式是全部节点坍缩到单点时的退化极限,而 Lagrange 插值是全部节点互异离散时的对立极限。Hermite 插值恰好居于两者之间,将空间的离散广度与切线的微分深度融为一体。
从全局多项式迈向局部样条
虽然 Hermite 插值能够锁定局部的切线走向,但它仍旧是一种全局多项式 方法。当节点数目 n n n 持续增加时,多项式阶数迅速升高,远离采样点的地方依然可能出现不受控的高次波动。
在实际工程应用中,与其一味提高全局阶数,不如固定使用三次多项式,将整个定义域划分为若干子区间分别拟合,并在接缝处施加严格的光滑拼接。
在下一篇样条插值 中,我们将推导兼顾局部灵活性与 C 2 C^2 C 2 高度光滑的自然三次样条体系。
参考文献
[1] R. L. Burden and J. D. Faires, Numerical Analysis , 9th ed. Brooks/Cole, Cengage Learning, 2011. ↩
[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. ↩
评论