2016-08-04 368 views
1

我想在python中翻译我的matlab代码的一部分。其实我在寻找如何翻译fminsearch,我和这个例子中发现本网站上:如何在Python中正确使用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的数组。

非常感谢您的帮助r求助!

回答

0

Python告诉你,因为在Python中,关键字参数总是遵循非关键字(即位置)参数(关键字参数分配给它们的名称,如调用fmin中的func)。你的函数调用看起来应该像:

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) 

另外,您可以拨打fminfull_output = True并获得元素的元组回首,那元组的第二个元素是最小值:

_, minval, *_ = scipy.optimize.fmin(banana, X, full_output=True) 

现在minval包含您的完整输出。

+0

好的,谢谢,我怎么能找到fmind的价值? –