python中的牛顿-CG优化,雅可比问题
我正在尝试用python进行Newton-CG优化。我的函数是f(x,y)=(1-x)^2+2(y-x^2)^2。初始点:x=3,y=2。这是我的密码: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
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我是新手如何“喜欢”你的评论,提高你的评价,或者在这个论坛上你真的帮助了我评论左边有一个小箭头,你可以按它向上投票,但向上投票的评论不会影响声誉。你可以投票并接受答案。