非等距节点三次样条插值型数值微分及其边界条件选择对误差的影响分析
我们考虑一个数值微分问题:已知函数 \(f(x)\) 在一组非等距节点 \(a = x_0 < x_1 < \dots < x_n = b\) 上的值 \(f(x_i)\),要求近似计算 \(f(x)\) 在某个点(可以是节点或非节点)处的导数值 \(f'(x)\)。我们将使用三次样条插值来构造近似函数,然后对其求导得到导数的近似值。本题重点分析不同边界条件的选择如何影响数值微分的整体精度,并给出误差估计。
1. 问题描述
设已知数据点 \((x_i, f(x_i)), i=0,1,\dots,n\),其中节点间距 \(h_i = x_{i+1} - x_i\) 不全相等。我们希望构造一个三次样条插值函数 \(S(x)\),使其满足:
- \(S(x_i) = f(x_i)\)。
- 在每个子区间 \([x_i, x_{i+1}]\) 上,\(S(x)\) 是三次多项式。
- \(S(x)\) 在 \([a,b]\) 上二阶连续可导,即 \(S \in C^2[a,b]\)。
然后,我们用 \(S'(x)\) 作为 \(f'(x)\) 的近似。关键问题:三次样条插值需要额外的边界条件来确定唯一解,常见选择有:
- 自然边界条件:\(S''(x_0) = S''(x_n) = 0\)。
- 固定边界条件:给定端点一阶导数值 \(S'(x_0) = f'(x_0)\),\(S'(x_n) = f'(x_n)\)(如果已知)。
- 非扭结边界条件:\(S'''(x)\) 在端点附近连续,即 \(S'''(x)\) 在第一个区间和最后一个区间为常数。
不同的边界条件会导致不同的样条函数,从而影响导数近似的精度,尤其是在端点附近。我们需要理解这种影响,并能在实际中选择合适的边界条件。
2. 三次样条插值的构造(简要回顾)
在每个子区间 \([x_i, x_{i+1}]\) 上,记 \(S_i(x)\) 为三次多项式:
\[S_i(x) = a_i + b_i (x - x_i) + c_i (x - x_i)^2 + d_i (x - x_i)^3. \]
定义 \(m_i = S'(x_i)\)(未知),则系数可由 \(m_i\) 和函数值表示。通过二阶导数连续条件,可得到关于 \(m_i\) 的线性方程组:
\[\lambda_i m_{i-1} + 2 m_i + \mu_i m_{i+1} = g_i, \quad i=1,\dots,n-1, \]
其中
\[\lambda_i = \frac{h_i}{h_{i-1}+h_i}, \quad \mu_i = 1-\lambda_i, \quad g_i = 3\left( \lambda_i \frac{f[x_i, x_{i-1}]}{h_{i-1}} + \mu_i \frac{f[x_{i+1}, x_i]}{h_i} \right), \]
\(f[\cdot,\cdot]\) 表示差商。
此时方程组有 \(n-1\) 个方程,但未知数 \(m_0, m_1, \dots, m_n\) 共 \(n+1\) 个,因此需要两个边界条件补充方程。
3. 不同边界条件的处理
3.1 自然边界条件
假设 \(S''(x_0)=0\) 和 \(S''(x_n)=0\)。利用二阶导数表达式,可得:
- 在 \(x_0\): \(2c_0 = 0\) ⟹ 可导出关于 \(m_0, m_1\) 的方程:
\[ 2 m_0 + m_1 = 3 f[x_0, x_1]. \]
- 在 \(x_n\):类似可得 \(m_{n-1} + 2 m_n = 3 f[x_{n-1}, x_n]\)。
加入方程组后,即可解出所有 \(m_i\)。
3.2 固定边界条件
已知 \(m_0 = f'(x_0)\),\(m_n = f'(x_n)\)。此时直接将这两个值代入,方程组仅需解 \(m_1,\dots,m_{n-1}\),方程数恰好匹配。
3.3 非扭结边界条件
要求三阶导数在端点处连续,即 \(S'''_1(x)\) 在 \([x_0,x_1]\) 和 \([x_1,x_2]\) 上相等,类似地右端点。这可推出:
\[m_0 \text{ 与 } m_1, m_2 \text{ 的关系式},\quad m_n \text{ 与 } m_{n-1}, m_{n-2} \text{ 的关系式}。 \]
具体形式为:
\[\frac{m_1 - m_0}{h_0} = \frac{m_2 - m_1}{h_1} \quad \text{(左端点)}, \quad \frac{m_n - m_{n-1}}{h_{n-1}} = \frac{m_{n-1} - m_{n-2}}{h_{n-2}} \quad \text{(右端点)}。 \]
4. 数值微分的实现
解出 \(m_i = S'(x_i)\) 后,在节点处导数近似值直接取 \(f'(x_i) \approx m_i\)。对于非节点 \(x \in (x_i, x_{i+1})\),可对 \(S_i(x)\) 求导:
\[S'_i(x) = b_i + 2c_i (x - x_i) + 3d_i (x - x_i)^2, \]
其中系数 \(b_i, c_i, d_i\) 由 \(f_i, f_{i+1}, m_i, m_{i+1}\) 表示:
\[b_i = \frac{f_{i+1} - f_i}{h_i} - \frac{h_i (2m_i + m_{i+1})}{3}, \quad c_i = \frac{m_i}{2}, \quad d_i = \frac{m_{i+1} - m_i}{3h_i}. \]
代入即可算得 \(S'(x)\)。
5. 误差分析及边界条件的影响
对于三次样条插值函数,若 \(f \in C^4[a,b]\),则有整体误差估计:
\[\| f - S \|_\infty \le \frac{5}{384} h^4 \| f^{(4)} \|_\infty, \]
其中 \(h = \max h_i\)。对导数有:
\[\| f' - S' \|_\infty \le \frac{1}{24} h^3 \| f^{(4)} \|_\infty \quad \text{(在固定边界条件下)}。 \]
但边界条件不同时,端点附近的误差阶可能降低:
- 自然边界条件:在端点处,若 \(f''(x_0) \ne 0\),则强加 \(S''(x_0)=0\) 会引入额外误差。此时在端点附近,\(|f'(x) - S'(x)| = O(h^2)\),而在内部区域仍为 \(O(h^3)\)。整体最大误差可能受端点影响而仅为 \(O(h^2)\)。
- 固定边界条件:若已知准确的端点导数值,则整体导数误差保持 \(O(h^3)\)。
- 非扭结边界条件:通常也能保持内部 \(O(h^3)\) 的精度,端点附近误差也较小,但若 \(f\) 在端点附近三阶导数变化剧烈,则可能略差于固定边界条件。
因此,若已知端点导数值,固定边界条件是最优选择;若未知,非扭结边界条件通常优于自然边界条件,因为自然边界条件假设二阶导数为零,与真实函数可能不符,导致端点导数误差增大。
6. 实际计算示例(思路)
假设 \(f(x) = \sin(x)\) 在区间 \([0, \pi]\) 上,取非等距节点:\(x=[0, 0.5, 1.2, 2.0, 2.5, \pi]\)。
- 计算 \(f(x_i)\)。
- 分别用自然、固定(假设已知 \(f'(0)=\cos(0)=1\),\(f'(\pi)=\cos(\pi)=-1\))、非扭结边界条件构造三次样条。
- 解三对角方程组得到 \(m_i\)。
- 在某个点(如 \(x=1.0\))计算 \(S'(1.0)\) 并与真实导数 \(\cos(1.0)\) 比较。
- 观察不同边界条件下节点处导数误差的分布,特别是端点 \(x=0\) 和 \(x=\pi\) 处。
通常可观察到:固定边界条件的端点误差最小;自然边界条件在端点处误差较大;非扭结条件介于两者之间。
7. 总结
- 三次样条插值提供了一种光滑的数值微分方法,适用于非等距节点。
- 边界条件的选择显著影响导数近似的精度,尤其是端点附近。
- 如果真实端点导数已知,应使用固定边界条件;如果未知,非扭结边界条件通常比自然边界条件更优。
- 整体导数误差在内部区域可达 \(O(h^3)\),但自然边界条件可能使整体最大误差降为 \(O(h^2)\)。
通过理解边界条件的影响,我们可以在实际应用中根据已知信息选择合适条件,从而在数值微分中获得更准确的结果。