有限差分递归和高阶

计算科学 算法 有限差分 数值分析 离散化
2021-12-21 16:03:09

这可能是一个微不足道的问题,但我一直想知道......

对于经典的中心有限差分方案,如果我有兴趣确定二阶导数,递归应用一阶导数方案(2x)是否与执行二阶导数方案一次给出相同的答案?那么截断错误的行为呢?

我想知道我是否应该编写一个第一中心 FD 并递归调用它,或者单独使用一个第二中心 FD 来处理二阶导数。有什么区别,为什么选择一种方法而不是另一种方法?

我提供的链接应该有助于澄清我的问题。

编辑:我会更明确。如果我转到上面的链接,我可以选择一个评估为 3 点的模板xi1,x0,xi+1. 我有两种选择来计算二阶导数。

选项 1:选择一阶导数中心方案,二阶精确,具有系数{1/2,0,1/2}. 如果我递归地应用它,我会得到二阶导数。

选项 2:选择二阶导数中心方案,二阶精确,带系数{1,2,1}. 我只需应用一次即可获得二阶导数。

最后,他们是一样的吗?我怀疑截断错误是不同的,但我不确定。

1个回答

简短的回答:是的(精确算术)。

您必须使用在x±12δx, 像这样:

ux=u(x+12δx)u(x12δx)δx+O(δx2)

然后,递归地应用该公式,您将得到“标准”二阶有限差分模板:

uxxFD=ux(x+12δx)ux(x12δx)δx=...=u(x+δx)2u(x)+u(xδx)(δx)2=uxx+(δx)212uxxxx+higher order terms.

这种递归“技巧”也适用于其他有限差分公式。

但是,我(对于一个人)不会递归地实施这样的方案。通过递归方案评估二阶导数的计算成本(定义为总 FLOP 计数)高于“经典”公式,但对准确性没有额外好处。

如果你使用u(x+δx)u(xδx),这等效于标准二阶导数近似,但具有两倍的网格宽度,因此前导误差项将是(2δx)212uxxxx, 是上面的 4 倍。