Python 数值微分和 h 的最小值

标签 python numerical-methods

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

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 之间的相对误差变得巨大。

这是为什么呢?这里发生了什么?

最佳答案

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 的 double 格式大约是 h=1e-5.

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

enter image description here

关于Python 数值微分和 h 的最小值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55200212/

相关文章:

java - 在Python中获取以毫秒为单位的GMT时间

python - SQLAlchemy - 某些表类的 ModuleMarker 错误

python - 通用编程 : Log FFT OR high-precision convolution (python)

c - -1.#IND0 在 C 中使用 Runge-Kutta 方法时出错

python - 周期性高斯的实现

python - 如何在 Flask 中使用 QuerySelectField?

python - 使用 numpy 比较并查找两个不同大小的数组之间的错误

python - 来自两个列表的数字对

最小化单变量函数的算法

python - Python 中的快速数值积分