非均匀节点下的数值微分:基于切比雪夫节点的重心权公式构造与应用
题目描述
在数值微分中,我们常常需要从一组给定的函数值(通常是在离散节点上)出发,来近似计算函数在某点处的导数值。当节点是等距分布时,我们可以使用有限差分公式。但当节点是非均匀分布时(例如切比雪夫节点,其在边界处密集,内部稀疏),如何构造一个高精度、数值稳定的数值微分公式?本题将围绕基于切比雪夫节点的重心权公式展开,讲解其构造原理、推导过程、具体实现步骤以及误差特性。
解题过程循序渐进讲解
第一步:问题背景与目标设定
假设我们有一个光滑函数 \(f(x)\) 定义在区间 \([-1, 1]\) 上。我们已知 \(f(x)\) 在 \(n+1\) 个节点 \(x_0, x_1, \dots, x_n\) 上的函数值 \(f_0, f_1, \dots, f_n\)。这些节点是切比雪夫节点(第一类),定义为:
\[x_k = \cos\left(\frac{2k+1}{2n+2}\pi\right), \quad k = 0, 1, \dots, n \]
注意,另一种常见的定义是 \(x_k = \cos\left(\frac{k\pi}{n}\right)\)(切比雪夫-高斯点),但这里我们采用前者(即切比雪夫多项式的零点),它在边界 \(\pm 1\) 处不包含端点,有利于避免龙格现象。我们的目标是:利用这组节点上的函数值,计算 \(f(x)\) 在任意点 \(\bar{x}\)(通常也在 \([-1,1]\) 内)处的一阶导数 \(f'(\bar{x})\) 的近似值。
为什么用切比雪夫节点? 因为对于光滑函数,在切比雪夫节点上的多项式插值具有近乎最佳的逼近性质,且数值稳定性好,尤其适合高次插值。
第二步:从拉格朗日插值出发推导数值微分公式
给定节点和函数值,我们首先构造通过这组数据的 \(n\) 次拉格朗日插值多项式 \(L_n(x)\):
\[L_n(x) = \sum_{k=0}^{n} f_k \ell_k(x) \]
其中 \(\ell_k(x)\) 是拉格朗日基多项式:
\[\ell_k(x) = \prod_{\substack{j=0 \\ j \ne k}}^{n} \frac{x - x_j}{x_k - x_j} \]
对 \(L_n(x)\) 求导,得到 \(f'(\bar{x})\) 的近似:
\[f'(\bar{x}) \approx L_n'(\bar{x}) = \sum_{k=0}^{n} f_k \ell_k'(\bar{x}) \]
定义微分矩阵 \(D\) 的元素为 \(D_{ik} = \ell_k'(x_i)\),则如果我们想求所有节点处的导数值,有:
\[\mathbf{f}' \approx D \mathbf{f} \]
但我们的目标更一般:求任意点 \(\bar{x}\) 处的导数值,即需要计算基函数在 \(\bar{x}\) 处的导数值 \(\ell_k'(\bar{x})\)。
直接对基函数求导表达式复杂,尤其是当 \(n\) 较大时。我们需要一种更稳定、高效的计算方式。
第三步:引入重心权与重心插值公式
记节点 \(\{x_k\}\) 对应的重心权为:
\[w_k = \frac{1}{\prod_{j \ne k} (x_k - x_j)}, \quad k = 0, \dots, n \]
对于切比雪夫节点,这些权重有显式表达式,可以避免直接计算乘积的数值不稳定。对于我们选用的切比雪夫节点 \(x_k = \cos\left(\frac{2k+1}{2n+2}\pi\right)\),有:
\[w_k = (-1)^k \sin\left(\frac{2k+1}{2n+2}\pi\right) \]
(这里忽略一个公共常数因子,因为最终公式中会约去)。
利用重心权,拉格朗日插值多项式可以写成重心形式:
\[L_n(x) = \frac{\sum_{k=0}^{n} \frac{w_k}{x - x_k} f_k}{\sum_{k=0}^{n} \frac{w_k}{x - x_k}} \]
当 \(x\) 不是节点时,这个公式计算稳定且高效。
第四步:推导重心形式的数值微分公式
对重心插值公式两边关于 \(x\) 求导。记分母为:
\[B(x) = \sum_{k=0}^{n} \frac{w_k}{x - x_k} \]
分子为:
\[A(x) = \sum_{k=0}^{n} \frac{w_k}{x - x_k} f_k \]
则 \(L_n(x) = A(x) / B(x)\)。求导得:
\[L_n'(x) = \frac{A'(x)B(x) - A(x)B'(x)}{[B(x)]^2} \]
其中:
\[A'(x) = -\sum_{k=0}^{n} \frac{w_k}{(x - x_k)^2} f_k, \quad B'(x) = -\sum_{k=0}^{n} \frac{w_k}{(x - x_k)^2} \]
代入整理,得到在任意点 \(\bar{x}\) 处的导数近似公式:
\[f'(\bar{x}) \approx L_n'(\bar{x}) = \frac{ \sum_{k=0}^{n} \frac{w_k}{\bar{x} - x_k} (f_k - L_n(\bar{x})) }{ \sum_{k=0}^{n} \frac{w_k}{\bar{x} - x_k} } \cdot \left( -\sum_{j=0}^{n} \frac{w_j}{(\bar{x} - x_j)^2} \right) + \frac{ -\sum_{k=0}^{n} \frac{w_k}{(\bar{x} - x_k)^2} f_k }{ \sum_{k=0}^{n} \frac{w_k}{\bar{x} - x_k} } \]
这个公式虽然看起来复杂,但可以简化计算。实际上,为了避免在 \(\bar{x}\) 接近某个节点时的不稳定,通常采用以下更稳定的计算步骤:
- 计算 \(B(\bar{x}) = \sum_{k} \frac{w_k}{\bar{x} - x_k}\),以及 \(B'(\bar{x}) = -\sum_{k} \frac{w_k}{(\bar{x} - x_k)^2}\)。
- 计算插值值 \(L_n(\bar{x}) = \left( \sum_{k} \frac{w_k}{\bar{x} - x_k} f_k \right) / B(\bar{x})\)。
- 则导数近似为:
\[ L_n'(\bar{x}) = \frac{ \sum_{k} \frac{w_k}{\bar{x} - x_k} (f_k - L_n(\bar{x})) }{ B(\bar{x}) (\bar{x} - x_k) } \quad \text{(需小心处理分母为零的情况)} \]
实际上,更常用的稳定形式是:
\[ L_n'(\bar{x}) = \sum_{k=0}^{n} \frac{w_k / (\bar{x} - x_k)}{ \sum_{j=0}^{n} w_j / (\bar{x} - x_j) } \cdot \frac{f_k - L_n(\bar{x})}{\bar{x} - x_k} \]
当 \(\bar{x} = x_i\) 是一个节点时,需取极限,得到:
\[ L_n'(x_i) = \sum_{\substack{k=0 \\ k \ne i}}^{n} \frac{w_k / w_i}{x_i - x_k} (f_k - f_i) \]
第五步:专用计算步骤与算法实现
为了清晰,我们给出计算 \(f'(\bar{x})\) 的具体算法步骤(假设已给定切比雪夫节点和函数值):
- 预处理:计算重心权 \(w_k\) 对于切比雪夫节点,使用公式:
\[ w_k = (-1)^k \sin\left(\frac{2k+1}{2n+2}\pi\right), \quad k=0,\dots,n \]
可以整体乘以一个常数,不影响结果。
- 如果 \(\bar{x}\) 不是节点:
- 计算 \(B = \sum_{k=0}^{n} \frac{w_k}{\bar{x} - x_k}\)。
- 计算 \(u_k = \frac{w_k}{\bar{x} - x_k}\) 对每个 \(k\)。
- 计算插值 \(L = \frac{\sum_{k=0}^{n} u_k f_k}{B}\)。
- 计算导数近似:
\[ f'(\bar{x}) \approx \sum_{k=0}^{n} \frac{u_k}{B} \cdot \frac{f_k - L}{\bar{x} - x_k} \]
注意这里 $ u_k/B $ 是归一化的权重。
- 如果 \(\bar{x} = x_i\) 是一个节点:
- 则使用公式:
\[ f'(x_i) \approx \sum_{\substack{k=0 \\ k \ne i}}^{n} \frac{w_k / w_i}{x_i - x_k} (f_k - f_i) \]
或者等价的:
\[ f'(x_i) = \sum_{\substack{k=0 \\ k \ne i}}^{n} \frac{w_k/w_i}{x_i - x_k} f_k - f_i \sum_{\substack{k=0 \\ k \ne i}}^{n} \frac{w_k/w_i}{x_i - x_k} \]
第六步:误差分析与特点
- 精度:由于使用的是 \(n\) 次插值多项式的导数,对于光滑函数,误差大致为 \(O(h^n)\),其中 \(h\) 是节点间的平均距离。但切比雪夫节点非均匀,误差在区间内分布更均匀,总体精度高。
- 稳定性:重心形式的数值微分公式在计算上比直接对拉格朗日基求导更稳定,因为它避免了直接计算大数相减。
- 适用性:特别适合在切比雪夫节点上进行的谱方法或高精度插值中,需要求导数的场景(例如谱方法求解微分方程)。
- 注意:当 \(n\) 很大时,对非节点求导仍可能遇到分母接近零的问题,此时需要小心处理或采用更高精度的算术。
第七步:简单数值示例
假设 \(n=2\),切比雪夫节点:
\[x_0 = \cos(\pi/6) = \sqrt{3}/2 \approx 0.8660, \quad x_1 = \cos(\pi/2) = 0, \quad x_2 = \cos(5\pi/6) = -\sqrt{3}/2 \approx -0.8660 \]
函数 \(f(x) = e^x\),函数值 \(f_0 = e^{0.8660}, f_1 = 1, f_2 = e^{-0.8660}\)。
计算在 \(\bar{x}=0.5\) 处的导数近似:
- 计算重心权(忽略常数因子):
\[ w_0 = \sin(\pi/6)=0.5, \quad w_1 = (-1)\sin(\pi/2)=-1, \quad w_2 = \sin(5\pi/6)=0.5 \]
-
计算 \(B = \frac{0.5}{0.5-0.8660} + \frac{-1}{0.5-0} + \frac{0.5}{0.5+0.8660} \approx -1.1547\)
-
计算 \(u_k\) 和 \(L\):
- \(u_0 = 0.5/(0.5-0.8660) \approx -1.3660\)
- \(u_1 = -1/(0.5-0) = -2\)
- \(u_2 = 0.5/(0.5+0.8660) \approx 0.3660\)
- \(L = (u_0 f_0 + u_1 f_1 + u_2 f_2) / B \approx 1.6487\)(与真实 \(e^{0.5} \approx 1.6487\) 一致)
-
计算导数:
\[ f'(0.5) \approx \frac{u_0}{B} \cdot \frac{f_0 - L}{0.5-0.8660} + \frac{u_1}{B} \cdot \frac{f_1 - L}{0.5-0} + \frac{u_2}{B} \cdot \frac{f_2 - L}{0.5+0.8660} \approx 1.6487 \]
与真实导数 \(e^{0.5} \approx 1.6487\) 一致(因为 \(e^x\) 的导数就是自身,且二次插值在三个节点上精确成立,所以此处导数也精确,这是一个特例)。
总结
通过以上步骤,我们系统讲解了基于切比雪夫节点的重心权数值微分公式的构造与应用。该方法的核心是利用重心插值公式的稳定形式,通过对插值函数求导得到高效的导数计算公式。这种方法尤其适合于在非均匀节点(如切比雪夫节点)上进行高精度数值微分,是谱方法和高精度科学计算中的重要工具。