2

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

我正在尝试一个简单而人为的函数,将它作为 x 某些值的导数:

f(x) = x^3,然后评估f'(x) = 3x^2x 在 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)。

4

2 回答 2

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
于 2013-08-13T22:29:12.963 回答
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
于 2013-08-13T22:37:03.230 回答