2012-07-13 31 views
6

Scipy'nin türev işlevi hakkında bir sorum var. Dün gece kullandım ve garip cevaplar aldım. Bu sabah tekrar bazı basit işlevlerle denedim ve bazı doğru cevapları ve bazı yanlışları aldım. Scipy Türev

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 

ben elle poly3 değerlerini kontrol edilip -2 = 17 = 95 2, = 15. 0 yüzden işlevi yanlış kullanarak olduğumu veya fonksiyonu ile yanlış bir şey var: İşte benim testlerdir . Teşekkür kullanma

: derivative belgeleri söylediği gibi Python 2.7.3, IPython 0.12.1, Numpy 1.6.1, scipy 0.9.0, Linux Mint 13

cevap

15

:

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`. 

Sen etmedim dx belirtmeyin, bu nedenle burada çok büyük olan 1 varsayılanını kullandı. Örneğin:

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 

sayısal türevleri alınması her zaman biraz zahmetli:

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 

Alternatif olarak, sipariş artırabilir.

+0

Ah, teşekkürler, bunun için belgeleri okudum ve çok iyi anlamadım. Diğer seçeneklerin nasıl çalıştığını göstermek için böyle bir örnek vermeleri hoş olurdu. Tekrar teşekkürler – user1523697