数值微分|有限差分法的误差分析

时间:2022-07-24
本文章向大家介绍数值微分|有限差分法的误差分析,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

在所有有限差分表达式中,系数之和为零。对舍入误差的影响可能很大。

h

很小时,

f(x),f(x ±h), f(x ± 2h), f(x ± 3h), f(x ± 4h), f(x ± 5h)

的值几乎相等。当它们通过系数相乘再相加,可能会丢失几个有效数字。

f^{prime}(x) = frac{f(x+h)-f(x-h)}{2h}+ O(h^2) qquad(1)

以(1)为例,分子可能会为0。但是我们不能使h太大,因为这样截断错误将变得过大。为了解决这个矛盾,我们可以采取以下措施:

  • 1 使用双精度浮点数运算
  • 2 采用精确度至少为
O(h^2)

的有限差分公式

例如,用中心差分法计算

f(x) = e^{−x}

x=1

处的二阶导数。取不同的

h

值以及精度为

10^{-6}

10^{-8}

,手算结果见下表

精确值为

f^{primeprime}(1) = e^{-1}= 0.36787944

。精度为

10^{-6}

时,

h

的最佳值为0.08。由于截断和舍入错误的共同影响,三位有效数字丢失。

h

大于最佳值,主要错误是由截断引起的。

h

小于最佳值,舍入误差变得明显。

精度为

10^{-8}

时,结果精确到四位有效数字。这是因为额外的精度降低了舍入误差。最佳

h

约为0.02。

Python的双精度计算

import math

h = 0.02
x = 1.0                                                                                   

ddf = ( math.exp(-(x+h)) - 2*math.exp(-(x)) + math.exp(-(x-h)) ) / (h*h)

print(ddf)

输出结果:

h的取值对双精度计算影响不大。