擅长:python、mysql、java
<p>这个错误来自对<code>Jacobian</code>和<code>Hessian</code>的调用,而不是<code>minimize</code>。用<code>Jacobian(lambda x: fun(x, a))</code>替换<code>Jacobian(fun)</code>和类似的<code>Hessian</code>应该可以做到(因为现在被区分的函数只有一个向量参数)。</p>
<p>还有一件事:<code>(a)</code>就是<code>a</code>,如果你想让它成为元组,就使用<code>(a,)</code>。</p>
<pre><code>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
def fun_der(x, a):
return Jacobian(lambda x: fun(x, a))(x).ravel()
def fun_hess(x, a):
return Hessian(lambda x: fun(x, a))(x)
x0 = np.array([2, 0]) # initial guess
a = 2.5
res = minimize(fun, x0, args=(a,), method='dogleg', jac=fun_der, hess=fun_hess)
print(res)
</code></pre>