你完全可以。只需使用jac=True
:
In [1]: import numpy as np
In [2]: from scipy.optimize import minimize
In [3]: def f_and_grad(x):
...: return x**2, 2*x
...:
In [4]: minimize(f_and_grad, [1], jac=True)
Out[4]:
fun: 1.8367099231598242e-40
hess_inv: array([[ 0.5]])
jac: array([ 2.71050543e-20])
message: 'Optimization terminated successfully.'
nfev: 4
nit: 2
njev: 4
status: 0
success: True
x: array([ 1.35525272e-20])
它實際上documented:
江淮汽車:BOOL或可調用,可選的雅可比(梯度)目標 功能。只用於CG,BFGS,Newton-CG,L-BFGS-B,TNC,SLSQP,狗腿, trust-ncg。 如果jac是一個布爾值並且爲真,則假定有趣的是返回 梯度以及目標函數。如果爲假,則會根據數字估計梯度 。 jac也可以是可調用的返回目標的梯度。在這種情況下,它必須接受相同的 參數。
(重點煤礦)
感謝您指出了這一點!從文檔/示例中不是很明顯,我覺得應該給出這個功能的重要性。 – velocirabbit