Python数值微分和h的最小值

奥罗奇

我使用以下代码计算一阶导数:

def f(x):
   f = np.exp(x)
   return f

def dfdx(x):
   Df = (f(x+h)-f(x-h)) / (2*h)
   return Df

例如,x == 10这很好用。但是,当我设置h为大约10E-14或以下时,Df开始获得的值实际上与预期值相距甚远,并且预期值f(10)之间的相对误差Df变得很大。

这是为什么?这是怎么回事

鲁兹·莱曼(Lutz Lehmann)

的评价f(x)有,充其量的舍入误差|f(x)|*mu,其中mu是浮点类型的机器常数。因此,中心差公式的总误差约为

2*|f(x)|*mu/(2*h)  +  |f'''(x)|/6 * h^2

在当前情况下,指数函数等于其所有导数,因此误差与

mu/h + h^2/6

具有最小的h = (3*mu)^(1/3),这对于与双格式mu=1e-16为左右h=1e-5

如果在分母中使用评估点之间的2*h实际差值代替实际值(x+h)-(x-h)则会提高精度这可以从下面到精确导数的距离的对数图中看到。

在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章