scipy.optimize.

approx_fprime#

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

純量或向量值函數導數的有限差分近似。

如果函數從 \(R^n\) 映射到 \(R^m\),則其導數形成一個 m 乘 n 的矩陣,稱為 Jacobian 矩陣,其中元素 \((i, j)\) 是 f[i] 對於 xk[j] 的偏導數。

參數:
xkarray_like

要於其上決定 f 梯度的座標向量。

fcallable

要估計其導數的函數。具有簽名 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)\) Jacobian 矩陣。

epsilon{float, array_like}, optional

用於決定函數梯度的 xk 增量。如果為純量,則對所有偏導數使用相同的有限差分 delta。如果為陣列,則應包含每個 xk 元素的一個值。預設值為 sqrt(np.finfo(float).eps),大約為 1.49e-08。

*argsargs, optional

要傳遞給 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])