我在想我在这里做错了什么..。
我正在试验一个简单的、人为的函数,取x的某些值的导数:
f(x) = x^3,然后求x在1,2,3处的导数f'(x) = 3x^2。
>>> 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 )。
发布于 2013-08-13 22:29:12
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-13 22:37:03
如果您指定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.0https://stackoverflow.com/questions/18220216
复制相似问题