如何获得一维有限差分公式üx xUxx节点间距不均匀?

计算科学 有限差分
2021-12-10 13:17:43

我知道如果我有均匀分布的点,我可以使用UxxUi12Ui+Ui+1dx2.

但是如果我的网格点间隔不均匀,我假设我可以通过以下方式获得有限差分公式:

D[D+(U)], 在哪里DD+是后向和前向差分公式。如果我定义hi=xixi1,那么我想我会得到:

D[D+(U)]=D[Ui+1Uihi+1]=Ui+1Uihi+1UiUi1hi+1hi=Ui12Ui+Ui+1hihi+1.

但是,我对这个公式有些怀疑。特别是,术语UiUi1hi+1可能是错的。对此的任何反馈将不胜感激:)

2个回答

由于梯度的有限差分近似是

u(x)ΔuΔx
很明显,在您的原始公式中,它需要是
u(x)Ui+1Uixi+1xiUiUi1xixi112(xi+1+xi)12(xi+xi1)
在你的符号中,它等于 方便地,而不是偶然地,这简化为统一网格尺寸的众所周知的公式。
u(x)Ui+1Uihi+1UiUi1hi12(hi+1+hi)=(Ui+1Ui)hi(UiUi1)hi+112(hi+1+hi)hihi+1.

Bengt Fornberg 的这篇论文Generation of Finite Difference Formulas on Arbitrarily Spaced Grids 为...提供了伪代码......

如果将其打包成一个循环,则可以在任意点集上创建任意度数的微分矩阵。如果你真的需要它,我有一个 Matlab 实现,它可以创建所述矩阵,我可以根据要求提供。

更新

Alexander刚刚指出fdcoeffF(k,xbar,x),Fornberg 算法的一种实现,它计算模板的权重,用于在点的一组数据上的点上的kth 导数xbarx