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_args
和my_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])