2014-12-29 3 views
1

Я использую scipy.optimize.minimize(), чтобы получить минимальное значение, и это х, укак написать scipy.optimize.minimize() параметр 's

def fun(self): 
    cols=self.maintablewidget.columnCount()-1 
    for k in range(3,cols): 
     for i in range(1,k): 
      d=string.atof(self.maintablewidget.item(i-1,k-1).text()) 
      xi=string.atof(self.xytablewidget.item(i-1,0).text()) 
      yi=string.atof(self.xytablewidget.item(i-1,1).text()) 
      f=lambda x,y: np.sum((np.sqrt((x-xi)**2+(y-yi)**2)-d)**2) 

     res=optimize.minimize(f,0,0)#I do not know how to give the optimize.minimize's parameter 
     print(res['x'][0]) 
     print(res['x'],res['fun']) 

Я не знаю, как укажите параметр optimize.minimize. Может кто-нибудь объяснить мне, как я могу это сделать?

ответ

0

Посмотрите на the documentation. По сути, если ваша функция зависит от двух параметров, вам необходимо передать их как x[0] и x[1] вместо x и y. Таким образом, в конце концов, вы действуете, будет зависеть от одного параметра вектора x .Для примера:

f = lambda x: np.sum((np.sqrt((x[0]-xi)**2+(x[1]-yi)**2)-d)**2) 
res = optimize.minimize(f, (initial_x, initial_y)) 

Минимально будет res.x и будет иметь вид вектора [x, y].

+0

ТипError: minim() принимает не менее 2 аргументов (1 данный) здесь есть ошибка – Hmily

+0

Жалуется, потому что вы только давали 'f'. Вы также должны ввести начальное значение. – elyase

+0

Я пишу вот так. res = optimize.minimize (f, (0,0)), но проблема все еще остается. TypeError: () принимает ровно 2 аргумента (1 задано) – Hmily

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