我想知道我在这里做错了什么......
我正在尝试一个简单而有人工作的函数,将其衍生为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)。
答案 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