scipy.optimize.approx_fprime#

scipy.optimize.approx_fprime(xk, f, epsilon=1.4901161193847656e-08, *args)[source]#

Finite-difference approximation of the gradient of a scalar function.

Parameters
xkarray_like

The coordinate vector at which to determine the gradient of f.

fcallable

The function of which to determine the gradient (partial derivatives). Should take xk as first argument, other arguments to f can be supplied in *args. Should return a scalar, the value of the function at xk.

epsilon{float, array_like}, optional

Increment to xk to use for determining the function gradient. If a scalar, uses the same finite difference delta for all partial derivatives. If an array, should contain one value per element of xk. Defaults to sqrt(np.finfo(float).eps), which is approximately 1.49e-08.

*argsargs, optional

Any other arguments that are to be passed to f.

Returns
gradndarray

The partial derivatives of f to xk.

See also

check_grad

Check correctness of gradient function against approx_fprime.

Notes

The function gradient is determined by the forward finite difference formula:

         f(xk[i] + epsilon[i]) - f(xk[i])
f'[i] = ---------------------------------
                    epsilon[i]

The main use of approx_fprime is in scalar function optimizers like fmin_bfgs, to determine numerically the Jacobian of a function.

Examples

>>> from scipy import optimize
>>> def func(x, c0, c1):
...     "Coordinate vector `x` should be an array of size two."
...     return c0 * x[0]**2 + c1*x[1]**2
>>> x = np.ones(2)
>>> c0, c1 = (1, 200)
>>> eps = np.sqrt(np.finfo(float).eps)
>>> optimize.approx_fprime(x, func, [eps, np.sqrt(200) * eps], c0, c1)
array([   2.        ,  400.00004198])