【问题标题】:Use of fmin in pythonpython中fmin的使用
【发布时间】:2014-02-12 21:27:57
【问题描述】:

我正在尝试使用 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

我尝试使用其他东西,例如最小化,但出现了同样的错误。谢谢。

【问题讨论】:

  • 你能发一个sscce 来准确地复制你的问题吗?
  • 从这里看来,您似乎没有正确使用 fmin。你最初的猜测是 x0 = x_r + x_i*1j 吗?如果是这样,那么您需要将其输入为该格式,您不能以您的方式给出您的 x0。如果它们是参数,那么您需要将它们作为元组传递给函数,例如args = (part_real,part_imag)。您应该首先阅读 fmin 的手册以确保您正确使用它:docs.scipy.org/doc/scipy/reference/generated/…

标签: python scipy


【解决方案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_rx_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 似乎永远不会被使用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-21
    • 2019-12-08
    • 1970-01-01
    • 2021-02-28
    • 1970-01-01
    • 2023-01-10
    • 1970-01-01
    相关资源
    最近更新 更多