2014-02-12 3 views
0

Я пытаюсь использовать Fmin в minize моей функции:Использования Fmin в питоне

def minim(self,x_r,x_i): 
    self.a=complex(3,4)*(3*np.exp(1j*self.L_ch)) 
    x = x_r + x_i 
    self.T=np.array([[0.0,2.0*self.a],[(0.00645+(x_r)^2), 4.3*x_i^2]]) 
    return self.T 

part_real=0.532 
part_imag=1.2 
R_0 = fmin(A.minim,part_real,part_imag) 

, но я получил эту ошибку:

File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/scipy/optimize/optimize.py", line 268, in function_wrapper 
    return function(x, *args) 
TypeError: minim() argument after * must be a sequence, not float 

Я пытался использовать что-то еще в этом роде, но свести к минимуму Появится такая же ошибка. Спасибо.

+0

Можете ли вы опубликовать [sscce] (http://sscce.org/), который точно повторяет вашу проблему? – Ffisegydd

+0

Из этого не похоже, что вы правильно используете fmin. Является ли ваше начальное предположение x0 = x_r + x_i * 1j? Если это так, то вам нужно ввести его в качестве этого формата, вы не можете дать свой x0 так, как вы. Если они предназначены для аргументов, вам необходимо передать их функции как кортеж, например. args = (part_real, part_imag). Сначала вы должны прочитать руководство по fmin, чтобы убедиться, что используете его правильно: http://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.fmin.html – pseudocubic

ответ

1

Вы не используете fmin правильно.

scipy.optimize.fmin(func, x0, args=(), xtol=0.0001, ftol=0.0001, maxiter=None, maxfun=None, full_output=0, disp=1, retall=0, callback=None). Если вы хотите оптимизировать как для x_r, так и для x_i, вы должны передать их вместе как x0. То, как вы это делаете, теперь проходит part_imag как args, которое должно быть последовательностью, а не скаляром. Именно поэтому Вы получаете исключение

Без воспроизводимым Например, я думаю, вы должны изменить свой код:

def minim(self,p): 
    x_r=p[0] 
    x_i=p[1] 
    self.a=complex(3,4)*(3*np.exp(1j*self.L_ch)) 
    x = x_r + x_i 
    self.T=np.array([[0.0,2.0*self.a],[(0.00645+(x_r)^2), 4.3*x_i^2]]) 
    return self.T 

part_real=0.532 
part_imag=1.2 
R_0 = fmin(A.minim,[part_real,part_imag]) 

И посмотреть, если он работает.

Также ваш x, кажется, никогда не используется.

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