python中的Newton-CG优化,Jacobian问题

2024-04-25 19:51:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试用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')

我有个错误"IndexError: too many indices for array"。你知道吗

当我做内尔德-米德优化,BFG和他们的工作。所以,问题是雅可比矩阵。我觉得在def jacobian的某个地方是个错误。你知道吗


Tags: ofbyreturndeffunctionnewtonparamsamount
1条回答
网友
1楼 · 发布于 2024-04-25 19:51:08

错误确实在jacobian函数中,您将der定义为0,大小为x,这是一个标量。而是使用params

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

相关问题 更多 >