我正在尝试使用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
我尝试使用像minim这样的其他东西,但出现了同样的错误。谢谢。
答案 0 :(得分: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
似乎永远不会被使用。