我有Python中的函數:如何近似函數的雅可比行列式和Hessian行列式?
def f(x):
return x[0]**3 + x[1]**2 + 7
# Actually more than this.
# No analytical expression
這是一個向量的標量值的功能。
如何近似數值上numpy或scipy中該函數的雅可比和Hessian?
我有Python中的函數:如何近似函數的雅可比行列式和Hessian行列式?
def f(x):
return x[0]**3 + x[1]**2 + 7
# Actually more than this.
# No analytical expression
這是一個向量的標量值的功能。
如何近似數值上numpy或scipy中該函數的雅可比和Hessian?
(因爲已經有很多在這個空間的更新在2017年後期更新。)
你最好的選擇可能是automatic differentiation。現在有很多這樣的軟件包,因爲它是深入學習的標準方法:
另一個選擇是用finite differences近似它,基本上只是評估(f(x + eps) - f(x - eps))/(2 * eps)
(但顯然比這更加努力)。這可能會比其他方法更慢,更不準確,特別是在中等高度的情況下,但是完全一般,不需要更改代碼。 numdifftools
似乎是這個標準的Python包。
您也可以嘗試使用SymPy
查找完全符號衍生物,但這將是一個相對手動的過程。
僅限於SciPy,我發現的最方便的方法是在合適的循環內找到scipy.misc.derivative,使用lambda來克服感興趣的功能。
漸變有'scipy.optimize.optimize.approx_fprime',這很方便。 – taper