scipy.optimize.

approx_fprime#

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

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

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

参数:
xk类数组

确定 f 的梯度的坐标向量。

f可调用对象

用于估计导数的函数。具有签名 f(xk, *args),其中 xk 是以 1-D 数组形式传递的参数,args 是任何额外的固定参数的元组,这些参数是完全指定函数所必需的。传递给此函数的参数 xk 是形状为 (n,) 的 ndarray(即使 n=1 也绝不是标量)。它必须返回形状为 (m,) 的 1-D 类数组或标量。

假设可调用对象具有签名 f0(x, *my_args, **my_kwargs),其中 my_argsmy_kwargs 是必需的位置参数和关键字参数。与其将 f0 作为可调用对象传递,不如将其包装为仅接受 x;例如,传递 fun=lambda x: f0(x, *my_args, **my_kwargs) 作为可调用对象,其中 my_args (元组)和 my_kwargs (字典)已在此函数调用之前收集。

在 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])