scipy.optimize.

approx_fprime#

scipy.optimize.approx_fprime(xk, f, epsilon=np.float64(1.4901161193847656e-08), *args)[源代码]#

标量或向量值函数的导数的有限差分近似。

如果函数映射从 \(R^n\)\(R^m\),则它的导数形成一个 m x n 矩阵,称为雅各比矩阵,其中元素 \((i, j)\) 是 f[i] 对 xk[j] 的偏导数。

参数:
xkarray_like

确定 f 梯度的坐标向量。

fcallable

要估计其导数的函数。签名为 f(xk, *args),其中 xk 是以一维数组形式的自变量, args 是完全指定函数所需的所有其他固定参数的元组。传递给此函数的自变量 xk 是形状为 (n,) 的 ndarray(即使 n=1 也不可能是标量)。它必须返回形状为 (m,) 的一维 array_like 或标量。

版本 1.9.0 中已变更:f 现在可以返回类似 1-D 数组,其中估计 \((m, n)\) 雅可比行列式。

epsilon{float, array_like}, 可选

xk 要使用的增量用于确定函数梯度。如果是标量,则对所有偏导数使用相同的有限差分德尔塔。如果是数组,每个元素均包含一个xk的值。默认值为 sqrt(np.finfo(float).eps),大约为 1.49e-08。

*argsargs, 可选

任何其他将传递给f的其他参数。

返回值:
jacndarray

fxk的部分导数。

另请参阅

check_grad

相对于 approx_fprime 检查梯度函数的正确性。

注释

函数梯度由前向有限差分公式决定

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

示例

>>> import numpy as np
>>> 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.00004208])