【问题标题】:Scipy DerivativeScipy 衍生物
【发布时间】:2012-07-13 10:43:08
【问题描述】:

我有一个关于 Scipy 的导数函数的问题。我昨晚用了它,得到了一些奇怪的答案。今天早上我再次尝试了一些简单的功能,得到了一些正确的答案和一些错误的答案。这是我的测试:

In [1]: def poly1(x):
...:     return x**2

In [3]: derivative(poly1, 0)
Out[3]: 0.0

In [4]: def poly2(x):
...:    return (x-3)**2

In [6]: derivative(poly2, 3)
Out[6]: 0.0

In [8]: def sin1(x):
...:     return sin(x)

In [14]: derivative(sin1, pi/2)
Out[14]: 5.5511151231257827e-17

In [15]: def poly3(x):
....:     return 3*x**4 + 2*x**3 - 10*x**2 + 15*x - 2

In [19]: derivative(poly3, -2)
Out[19]: -39.0

In [20]: derivative(poly3, 2)
Out[20]: 121.0

In [22]: derivative(poly3, 0)
Out[22]: 17.0

我手动检查了 poly3 的值,-2 = 17, 2 = 95, 0 = 15。所以我使用的函数是错误的,还是函数有问题。谢谢

使用:Python 2.7.3、IPython 0.12.1、Numpy 1.6.1、Scipy 0.9.0、Linux Mint 13

【问题讨论】:

    标签: python math scipy


    【解决方案1】:

    正如derivative 的文档所说:

    derivative(func, x0, dx=1.0, n=1, args=(), order=3)
        Find the n-th derivative of a function at point x0.
    
        Given a function, use a central difference formula with spacing `dx` to
        compute the n-th derivative at `x0`.
    

    你没有指定dx,所以它使用了默认的1,这里太大了。例如:

    In [1]: from scipy.misc import derivative
    
    In [2]: derivative(lambda x: 3*x**4 + 2*x**3 - 10*x**2 + 15*x - 2, -2, dx=1)
    Out[2]: -39.0
    
    In [3]: derivative(lambda x: 3*x**4 + 2*x**3 - 10*x**2 + 15*x - 2, -2, dx=0.5)
    Out[3]: -22.5
    
    In [4]: derivative(lambda x: 3*x**4 + 2*x**3 - 10*x**2 + 15*x - 2, -2, dx=0.1)
    Out[4]: -17.220000000000084
    
    In [5]: derivative(lambda x: 3*x**4 + 2*x**3 - 10*x**2 + 15*x - 2, -2, dx=0.01)
    Out[5]: -17.0022000000003
    
    In [6]: derivative(lambda x: 3*x**4 + 2*x**3 - 10*x**2 + 15*x - 2, -2, dx=1e-5)
    Out[6]: -17.000000001843318
    

    或者,您可以增加订单:

    In [7]: derivative(lambda x: 3*x**4 + 2*x**3 - 10*x**2 + 15*x - 2, -2, dx=1, order=5)
    Out[7]: -17.0
    

    取数值导数总是有点麻烦。

    【讨论】:

    • 啊,谢谢,我通读了它的文档,并没有真正理解它。如果他们提供一个这样的例子来展示其他选项是如何工作的,那就太好了。再次感谢
    猜你喜欢
    • 2010-09-30
    • 2012-04-07
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-08
    • 2014-12-26
    相关资源
    最近更新 更多