在所有有限差分表达式中,系数之和为零。对舍入误差的影响可能很大。 很小时,的值几乎相等。当它们通过系数相乘再相加,可能会丢失几个有效数字。
以(1)为例,分子可能会为0。但是我们不能使h太大,因为这样截断错误将变得过大。为了解决这个矛盾,我们可以采取以下措施:
例如,用中心差分法计算 在 处的二阶导数。取不同的 值以及精度为 和 ,手算结果见下表
精确值为 。精度为 时, 的最佳值为0.08。由于截断和舍入错误的共同影响,三位有效数字丢失。 大于最佳值,主要错误是由截断引起的。 小于最佳值,舍入误差变得明显。
精度为 时,结果精确到四位有效数字。这是因为额外的精度降低了舍入误差。最佳 约为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的取值对双精度计算影响不大。
★★★★往期相关★★★★
数值微分|中心差分法(Central Finite Difference Approximations)