标准有限差分公式可用于在您具有函数值的期望下数值计算导数在均匀分布的点上,所以是一个常数。如果我有不均匀间隔的点怎么办,所以现在从一对相邻点到下一个不同?显然我仍然可以计算一阶导数,但是是否有更高阶和精度的数值微分公式可以适应网格大小的变化?
如何在数值上区分不均匀采样的函数?
JM 的评论是正确的:您可以找到一个插值多项式并对其进行微分。还有其他推导此类公式的方法;通常,它们都导致求解系数的范德蒙德系统。当有限差分模板包含大量点时,这种方法是有问题的,因为 Vandermonde 矩阵变得病态。Fornberg设计了一种在数值上更稳定的方法,并在他的第二篇论文中进行了更清晰、更笼统的解释。
这是一个简单的 MATLAB 脚本,它实现了 Fornberg 的方法来计算具有任何点集的任何阶导数的有限差分近似系数。有关一个很好的解释,请参阅LeVeque 关于有限差分方法的文本的第 1 章。
关于 FD 公式的更多信息:假设您有一个 1D 网格。如果使用整组网格点来确定一组 FD 公式,则所得方法相当于在整个网格中找到一个插值多项式并对其进行微分。这种方法被称为光谱搭配。或者,对于每个网格点,您可以仅使用几个相邻点来确定 FD 公式。这就是传统的有限差分方法所做的。
如以下评论中所述,如果未仔细选择点,则使用非常高阶的有限差分会导致振荡(龙格现象)。
http://mathformeremortals.wordpress.com/2013/01/12/a-numerical-second-derivative-from-three-points/
这解决了您的问题并显示了您正在寻找的二阶导数公式。高阶导数遵循相同的模式。
上述答案在为您提供代码方面非常有用,但在理论方面并不那么好。如果您想更深入地研究插值多项式,请通过一些具体示例来看看这种理论处理:
Singh、Ashok K. 和 BS Bhadauria。“使用拉格朗日插值公式的不等子区间的有限差分公式。” 国际数学与分析杂志 3.17 (2009): 815-827。(链接到PDF)
作者使用拉格朗日插值(参见Wikipedia文章)来计算 3 点、4 点和 5 点插值多项式,以及它们的一阶、二阶和三阶导数。它们也有截断误差的表达式,这在使用任何有限差分方案时都很重要。它们还具有使用N个点计算插值多项式的通用公式。
拉格朗日插值多项式很有用,因为它们及其导数在您插值的域中可以非常准确,并且它们不假设网格间距均匀。由于拉格朗日插值多项式的性质,导数的阶数永远不会超过网格点数。
我认为这很好地回答了您的问题,因为我引用的论文具有任意高阶有限差分方案的公式,这些公式本质上适用于不均匀的网格,并且仅受您在模板中包含的网格点数量的限制。该论文还有一个用于截断误差的通用公式,它将帮助您根据您可能正在考虑的其他方案评估拉格朗日插值多项式方案。作者的论文应该给出与 Fornberg 方法相同的结果。他们的贡献实际上只是统计了一些示例并给出了错误的估计值,您可能会发现这很有用。
我发现我引用的论文和Fornberg 的工作对我自己的研究很有用。
我曾经在这方面工作了一段时间。数据的来源有很大的不同。通常它会包含来自实验数据的错误,或者仅以有限的精度引用。在这种情况下,不要通过这些点拟合曲线;这只会发现错误。最好在兴趣点周围获取一系列数据,为其拟合平滑曲线并加以区分。细节(有多大的间隔,曲线拟合的顺序)实际上取决于你拥有什么样的数据,以及你想要什么样的导数。如果这对您很重要,我建议您尝试不同的方法并选择您喜欢的方法。
一个小的说明性问题。假设您有 100 个点非均匀分布在 [0,1] 中,并且您想知道 x=1/2 处的二阶导数。您是否应该精确地拟合最接近的三个点并接受他们的错误?或者你应该在你拥有的每个点上拟合一条抛物线,包括那些距离 x=1/2 很远的点?你很快就会发现这是一个难题。问题是什么最适合您的情况