2016-08-04 3 views
1

Я пытаюсь перевести часть моего кода matlab в python. На самом деле я ищу, как перевести fminsearch и я нашел на этом сайте в этом примере:Как правильно использовать fminsearch в Python?

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, i точный X представляет собой массив длины 10.

Большое вам спасибо Помогите!

ответ

0

Python сказал вам, что, поскольку в Python аргументы ключевого слова всегда следуют за аргументами non keyword (i.e positional) (ключевое слово 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 содержит ваш полный выход.

+0

Хорошо спасибо, и как я могу получить значение fmind? –

Смежные вопросы