scipy misc.derivative结果不正确

时间:2013-08-13 22:22:18

标签: 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    

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

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

如果您将dx或间距指定为足够小的数字,您将获得适当的近似值。

>>> from scipy import misc
>>> def f(x): return x*x*x
... 
>>> misc.derivative(f,2,dx=0.1)
12.010000000000009

>>> round(misc.derivative(f,2,dx=0.1),0)
12.0