scipy misc.derivative 结果不正确

ash*_*ash 2 python scipy

我想知道我在这里做错了什么......

我正在试验一个简单而人为的函数,取它对 x 的某些值的导数:

f(x) = x^3,然后f'(x) = 3x^2计算 x 在 1、2、3 处的导数

>>> from scipy import misc
>>> def x2(x): return x*x*x
...
>>> misc.derivative(x2,1)
4.0
>>> misc.derivative(x2,2)
13.0
>>> misc.derivative(x2,3)
28.0    
Run Code Online (Sandbox Code Playgroud)

问题:结果不正确,它们都比它们应有的值大 +1(它们应该分别是 3、12 和 27)。

use*_*ica 5

scipy.misc.derivative不准确。它使用中心差分公式来计算导数。默认间距为1.0,这对于许多应用程序来说相当高。减少它会得到更准确的结果:

>>> from scipy import misc
>>> def x3(x): return x*x*x
... 
>>> misc.derivative(x3, 1)
4.0
>>> misc.derivative(x3, 1, dx=0.5)
3.25
>>> misc.derivative(x3, 1, dx=0.25)
3.0625
>>> misc.derivative(x3, 1, dx=1.0/2**16)
3.0000000002328306
Run Code Online (Sandbox Code Playgroud)

  • 杰出的!我很幸运地没有意识到这个规定,我认为它的精度或多或少是一个固定的常数。有趣的是,我想知道通过缩小步长来提高准确性会带来什么性能差异。 (2认同)