如何在数值上区分不均匀采样的函数?


21

标准有限差分公式是可用的,以数值计算的期望你有函数值下一个衍生物在均匀间隔的点,让ħ X ķ + 1 - X ķ是常数。如果我的点间距不均匀怎么办,以使现在从一对相邻的点到另一对相邻的点变化?显然,我仍然可以将一阶导数计算为,但是存在高阶数值微分公式以及可以适应网格大小变化的精度?f(xk)hxk+1xkhf(x)1hk[f(xk+1)f(xk)]


7
您始终可以构造一个通过点的(逐段)多项式插值,然后对其进行微分。
JM

或者,您可以不简化来重建有限差分公式。通常,必须进行集成才能完成此操作,但JM的建议可能更稳定。h=xk+1xk
rcollyer 2011年

那是什么功能?
mbq 2011年

促使这个问题的例子是在对数间隔的值取样的函数,但计算的对数变换的数据的二阶导数给出了有趣的结果,我想在其上的检查。另外,我想我会问尽可能一般的问题。xk=x0δk
David Z

1
就我而言,仅适用于一阶和二阶导数的某些问题将是一个完美的答案。我写问题的方式是,如果有人回答一个问题,我会做一个一般性的回答,但是实际上在实践中,最有用的是一阶和二阶推导。
David Z

Answers:


21

JM的评论是正确的:您可以找到一个插值多项式并将其微分。还有其他推导此类公式的方法。通常,它们都导致求解范德蒙德系统的系数。当有限差分模具包含大量点时,此方法会出现问题,因为范德蒙德矩阵变得病态。Fornberg设计了一种在数值上更稳定的方法,在他的第二篇论文中对此进行了更清晰,更一般的解释。

这是一个简单的MATLAB脚本,该脚本实现了Fornberg方法来计算具有任意点集的任何阶数导数的有限差分近似系数。有关详细说明,请参见 LeVeque的文章中有关有限差分法的第1章。

关于FD公式的更多信息:假设您有一维网格。如果使用整个网格点集来确定一组FD公式,则结果方法等效于在整个网格中找到一个插值多项式并将其微分。这种方法称为频谱搭配。另外,对于每个网格点,您可以仅使用几个相邻点来确定FD公式。这是传统的有限差分方法所完成的。

如下面的评论中所述,如果未仔细选择点,则使用非常高阶的有限差分会导致振荡(龙格现象)。


3
另一方面,当您使用插值多项式时,如果数据配置错误,您必须始终记住诸如龙格现象之类的数据可能发生的事情。我想说分段多项式可能不太容易受此影响
JM

1
我想知道科耶夫(Koev)的工作和弗恩伯格(Fornberg)的技术是否可以相关?
David Ketcheson

1
有趣的是,似乎Fornberg公式与Lyness和Moler基于经典内维尔方法生成插值多项式开发的早期公式之间存在相似之处。实际上,它们可能是用不同表示法表示的相同公式,但我尚未进行彻底检查。
JM

2
具有许多点的多项式插值法要求特殊的点分布条件良好。通常,对于非均匀点分布,不建议先进行插值然后对插值多项式求微分,因为它可能会高度振荡(请考虑一下JM提到的“ Runge现象”)。根据您的需要,最好使用三次样条,这对于许多实际目的可以为逼近导数的逼近问题提供良好的答案。
艾伦·恩格西格·卡鲁普

1
好答案。仅作为参考,本文提供了Fornberg方法的另一种方法。它遵循相同的原理,但是给出了不同的算法。
davidhigh '17


2

上面的答案在为您提供要使用的代码方面很棒,但在理论上却不那么理想。如果您想更深入地研究插值多项式,请通过一些具体示例了解这种理论处理:

Singh,Ashok K.和BS Bhadauria。“使用拉格朗日插值公式的不等子区间的有限差分公式。” 国际数学与分析杂志3.17(2009):815-827。(链接到PDF

作者使用拉格朗日插值法(请参阅Wikipedia文章)来计算3点,4点和5点插值多项式,以及它们的一阶,二阶和三阶导数。它们也具有截断误差的表达式,这在使用任何有限差分方案时必须加以考虑。它们还具有用于使用N点计算插值多项式的通用公式。

拉格朗日插值多项式很有用,因为它们和它们的导数在您要插值的域中可能非常准确,并且它们不假定网格间距均匀。由于拉格朗日插值多项式的性质,导数阶数永远不能超过网格点数。

我认为这很好地回答了您的问题,因为我引用的论文具有用于任意高阶有限差分方案的公式,该公式本质上适用于不均匀的网格,并且仅受模板中包含的网格点数量的限制。本文还为截断误差提供了一个通用公式,该公式将帮助您针对可能考虑的其他方案评估拉格朗日插值多项式方案。作者的论文应提供与Fornberg方法相同的结果。他们的贡献实际上只是列举了一些示例并给出了错误的估计,您可能会发现这很有用。

我发现我引用的论文 Fornberg的工作都对我自己的研究有用。


1
很抱歉,我必须指出这一点,但是您引用的参考文献看起来很奇怪-他们使用了可怕的公式,只解决了一些特殊情况。相比之下,Fornberg 通过提供一种简单的算法(已经在80年代)解决了一般问题。看到这里
davidhigh

另一篇解决一般问题的论文在这里
davidhigh

2
最后的评论是对本文的不尊重。在“一种出色的理论方法”中,您不能有9个参考文献,其中7个参考文献是您自己的工作,而1个参考文献是一本通用的数字分析书。至少如果您不是一个人发明这个话题的,那不是那些作者没有的。
davidhigh

你是绝对正确的。我不会说这些公式很可怕,尽管可以改进。特殊情况实际上可以很好地用作测试/比较,并且确实提供了一个通用公式,该公式必须与Fornberg相同。
jvriesem

1
@jvriesem请注意,引用的论文在Eqn的第三个术语中有错误的符号。(15b)
Tarek


-4

最简单的方法是使用有限差分近似。

一种简单的两点估计是计算通过点(x,f(x))和(x + h,f(x + h))的附近割线的斜率。[1] 选择一个小数h,h表示x的微小变化,它可以是正数或负数。这条线的斜率是

FX+H-FXH

该表达式是牛顿的差商。

该割线的斜率与切线的斜率相差大约与h成正比的量。当h接近零时,割线的斜率接近切线的斜率。因此,x处f的真导数是正割线越来越接近切线时差商的值的极限


1
I think you're getting downvoted because David Zaslavsky specifically mentioned the difference quotient formula, and the question is asking if there are any better approximations.
Dan

7
Also because it's a direct copy-and-paste from Wikipedia, except for the spam link that was originally part of the answer.
David Z
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.