2014-12-29 2 views
1

내가 최소값을 얻을 수 scipy.optimize.minimize()를 사용하고 그것을()의 매개 변수

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']) 

는 나도 몰라 Y, X의 방법 optimize.minimize의 매개 변수를 제공하십시오. 누군가 내가 어떻게 할 수 있는지 설명해 줄 수 있습니까?

답변

0

the documentation을 살펴보십시오. 기본적으로 함수가 두 개의 매개 변수에 의존하는 경우 xy 대신 x[0]x[1]으로 전달해야합니다. 그래서 결국 당신은 예를 .FOR 하나의 벡터 매개 변수 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

TypeError : minimize()는 최소한 2 개의 인수 (주어진 값 1)를 취합니다. 여기 오류는 – Hmily

+0

입니다. 단지'f' 만했기 때문에 불평합니다. 또한 초기 값을 입력해야합니다. – elyase

+0

나는 이렇게 쓴다. res = optimize.minimize (f, (0,0)),하지만 여전히 문제가 있습니다. TypeError : ()은 정확히 2 개의 인수 (주어진 1)를 취합니다. – Hmily