python中的牛顿-CG优化,雅可比问题

python中的牛顿-CG优化,雅可比问题,python,optimization,scipy,Python,Optimization,Scipy,我正在尝试用python进行Newton-CG优化。我的函数是f(x,y)=(1-x)^2+2(y-x^2)^2。初始点:x=3,y=2。这是我的密码: from scipy.optimize import minimize def f(params): #definite function x, y = params #amount of params return (1 - x) ** 2 + 2 * (y - x ** 2) ** 2 def jacobian(pa

我正在尝试用python进行Newton-CG优化。我的函数是f(x,y)=(1-x)^2+2(y-x^2)^2。初始点:x=3,y=2。这是我的密码:

from scipy.optimize import minimize 

def f(params): #definite function
    x, y = params #amount of params 
    return (1 - x) ** 2 + 2 * (y - x ** 2) ** 2

def jacobian(params): #definite function
    x, y = params #amount of params
    der = np.zeros_like(x)
    der[0] = -8 * x * (-x ** 2 + y) + 2 * x - 2 #derivative by x
    der[1] = -4 * x ** 2 + 4 * y #derivative by y
    return der

initial_guess = [3, 2] #initial points
result = minimize(f, initial_guess, jac = jacobian, method = 'Newton-CG')
我得到一个错误“索引器:数组的索引太多”


当我进行Nelder-mead优化时,BFGS和它们都起作用了。所以,问题在于雅可比矩阵。我觉得
def jacobian
中的某个地方是个错误

错误确实存在于雅可比函数中,您将
der
定义为0,大小为
x
,这是一个标量。而是使用
参数

def jacobian(params): #definite function
    x, y = params #amount of params
    der = np.zeros_like(params)
    der[0] = -8 * x * (-x ** 2 + y) + 2 * x - 2 #derivative by x
    der[1] = -4 * x ** 2 + 4 * y #derivative by y
    return der

它不应该是像(参数)一样的
der=np.zeros\u吗?因为
x
是一个标量?哦,是的。我看它现在能用了!非常感谢@rinkert我是新手如何“喜欢”你的评论,提高你的评价,或者在这个论坛上你真的帮助了我评论左边有一个小箭头,你可以按它向上投票,但向上投票的评论不会影响声誉。你可以投票并接受答案。