【发布时间】:2017-04-29 10:59:37
【问题描述】:
我试图了解 Python 的 scipy.optimize.minimize 函数中的“dogleg”方法是如何工作的。我正在修改帮助页面底部的示例。
根据注释,dogleg 方法需要 Jacobian 和 Hessian 参数。为此,我使用numdifftools 包:
import numpy as np
from scipy.optimize import minimize
from numdifftools import Jacobian, Hessian
def fun(x,a):
return (x[0] - 1)**2 + (x[1] - a)**2
x0 = np.array([2,0]) # initial guess
a = 2.5
res = minimize(fun, x0, args=(a), method='dogleg',
jac=Jacobian(fun)([2,0]), hess=Hessian(fun)([2,0]))
print(res)
编辑:
如果我按照以下帖子的建议进行更改,
res = minimize(fun, x0, args=a, method='dogleg',
jac=Jacobian(lambda x: fun(x,a)),
hess=Hessian(lambda x: fun(x,a)))
我收到一个错误TypeError: <lambda>() takes 1 positional argument but 2 were given。我做错了什么?
在初始猜测x0 处计算雅可比和黑森矩阵也是正确的吗?
【问题讨论】:
标签: python numpy optimization lambda scipy