Python.Scipy Числовая Производная - PullRequest
0 голосов
/ 21 мая 2018

Не так давно я обнаружил scipy.misc.derivative.

def derivative(func, x0, dx=1.0, n=1, args=(), order=3)

Невероятно, насколько это быстро и точно.Итак, я решил выяснить, как это работает.Но я не до конца понимаю код этой функции, который используется в derivative:

def central_diff_weights(Np, ndiv=1)

Насколько я понимаю, функция находит коэффициенты в разложении производной высшего порядка,но как это сделать?

Источник: https://github.com/scipy/scipy/blob/v0.18.0/scipy/misc/common.py#L179-L249

Код:

def central_diff_weights(Np, ndiv=1):
    """
    Return weights for an Np-point central derivative.
    Assumes equally-spaced function points.
    If weights are in the vector w, then
    derivative is w[0] * f(x-ho*dx) + ... + w[-1] * f(x+h0*dx)
    Parameters
    ----------
    Np : int
        Number of points for the central derivative.
    ndiv : int, optional
        Number of divisions.  Default is 1.
    Notes
    -----
    Can be inaccurate for large number of points.
    """

    if Np < ndiv + 1:
        raise ValueError("Number of points must be at least the derivative order 
    + 1.")
    if Np % 2 == 0:
        raise ValueError("The number of points must be odd.")
    from scipy import linalg
    ho = Np >> 1
    x = arange(-ho,ho+1.0)
    x = x[:,newaxis]
    X = x**0.0
    for k in range(1,Np):
        X = hstack([X,x**k])
    w = product(arange(1,ndiv+1),axis=0)*linalg.inv(X)[ndiv]
    return w
...