【发布时间】:2019-09-16 06:11:21
【问题描述】:
我正在尝试在 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"。
当我制作 Nelder - 蜂蜜酒优化时,BFGS 和它们工作。所以,问题在于雅可比矩阵。我觉得def jacobian 的某个地方是个错误。
【问题讨论】:
-
不应该是
der = np.zeros_like(params)吗?因为x是一个标量? -
哦,是的。我看到它现在有效!非常感谢!
-
@rinkert 我是堆栈溢出的新手,如何“喜欢”您的评论,以提高您的评分或在此论坛上,因为您真的帮助了我
-
评论左侧有一个小箭头,可以点赞,但是cmet点赞不影响名誉。不过,您可以投票并接受答案。
标签: python optimization scipy