标准有限差分公式是可用的,以数值计算的期望你有函数值下一个衍生物在均匀间隔的点,让ħ ≡ X ķ + 1 - X ķ是常数。如果我的点间距不均匀怎么办,以使现在从一对相邻的点到另一对相邻的点变化?显然,我仍然可以将一阶导数计算为,但是存在高阶数值微分公式以及可以适应网格大小变化的精度?
标准有限差分公式是可用的,以数值计算的期望你有函数值下一个衍生物在均匀间隔的点,让ħ ≡ X ķ + 1 - X ķ是常数。如果我的点间距不均匀怎么办,以使现在从一对相邻的点到另一对相邻的点变化?显然,我仍然可以将一阶导数计算为,但是存在高阶数值微分公式以及可以适应网格大小变化的精度?
Answers:
JM的评论是正确的:您可以找到一个插值多项式并将其微分。还有其他推导此类公式的方法。通常,它们都导致求解范德蒙德系统的系数。当有限差分模具包含大量点时,此方法会出现问题,因为范德蒙德矩阵变得病态。Fornberg设计了一种在数值上更稳定的方法,在他的第二篇论文中对此进行了更清晰,更一般的解释。
这是一个简单的MATLAB脚本,该脚本实现了Fornberg方法来计算具有任意点集的任何阶数导数的有限差分近似系数。有关详细说明,请参见 LeVeque的文章中有关有限差分法的第1章。
关于FD公式的更多信息:假设您有一维网格。如果使用整个网格点集来确定一组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的工作都对我自己的研究有用。
我发现本文涉及具有不等子间隔的有限差分公式。我将使用它而不是插值。输入所有公式后,将它们发布在这里。
最简单的方法是使用有限差分近似。
一种简单的两点估计是计算通过点(x,f(x))和(x + h,f(x + h))的附近割线的斜率。[1] 选择一个小数h,h表示x的微小变化,它可以是正数或负数。这条线的斜率是
该表达式是牛顿的差商。
该割线的斜率与切线的斜率相差大约与h成正比的量。当h接近零时,割线的斜率接近切线的斜率。因此,x处f的真导数是正割线越来越接近切线时差商的值的极限