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
f 对xk的部分导数。
另请参阅
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])