我正在尝试在python中翻译我的matlab代码的一部分。其实我正在寻找如何翻译fminsearch
,我在这个网站上找到了这个例子:
import scipy.optimize
banana = lambda x: 100*(x[1]-x[0]**2)**2+(1-x[0])**2
xopt = scipy.optimize.fmin(func=banana, x0=[-1.2,1])
我的第一个问题是如何返回fmin
的值?
在我键入的代码中:
banana = lambda X: diff_norm(X, abst0, ord0);
Xu = scipy.optimize.fmin(func=banana, X)
Python回答我:
Xu = scipy.optimize.fmin(func=banana, X)
SyntaxError: non-keyword arg after keyword arg
我不明白为什么Python告诉我,因为我想做的是最小化函数diff_norm
更改X
的值,我精确X
是一个数组长度10。
非常感谢你的帮助!
答案 0 :(得分:0)
Python告诉你,因为在Python中,关键字参数总是遵循非关键字(即位置)参数(关键字args具有分配给它们的名称,如func
调用中的fmin
。您的函数调用应如下所示:
Xu = scipy.optimize.fmin(func=banana, x0=X)
以符合 Python's calling conventions 。或者,根据function definition of fmin
,您只能为这两个第一个参数提供位置参数:
Xu = scipy.optimize.fmin(banana, X)
这将返回最小化函数的值,因此,只需调用提供这些参数的函数:
minval = banana(Xu)
或者你可以用fmin
调用full_output = True
并获得一个元组元组,该元组的第二个元素是最小值:
_, minval, *_ = scipy.optimize.fmin(banana, X, full_output=True)
现在minval
包含您的完整输出。