【问题标题】:scipy.optimize.fim Error: need more than 1 value to unpackscipy.optimize.fim 错误:需要超过 1 个值才能解压
【发布时间】:2023-04-10 20:21:01
【问题描述】:

我知道有很多与我类似的帖子,但我真的无法将它们应用到我的情况中,所以我请求您的帮助。基本上,我的代码如下:

def Black_min(f, k, ann, vol, ex, cp):
    d1=(math.log(f/k)+0.5*vol**2*ex)/math.sqrt(vol**2*ex)
    d2=(math.log(f/k)-0.5*vol**2*ex)/math.sqrt(vol**2*ex)
    Price=cp*(f*norm.cdf(cp*d1)-k*norm.cdf(cp*d2))*ann*20000
    return Price

banana = lambda x: (Price_Cube[0][4]-Black_min(F[0], K[0][4], Annuity[0], x, Expiry[0], CP[4]))**2
xopt, fopt = scipy.optimize.fmin(func=banana, x0=[Vol_Cube[0][0]],  disp=False)

Price_Cube, K 是包含数字的列表,Annuity, Expiry 和 CP 只是简单的列表。当我运行代码时,我得到了这个。

    xopt, fopt = scipy.optimize.fmin(func=banana, x0=[Vol_Cube[0][0]],  disp=False)

ValueError: need more than 1 value to unpack

我知道这是一个愚蠢的错误,但我真的不明白。任何帮助表示赞赏,在此先感谢。

【问题讨论】:

  • 什么是 Vol_Cube
  • 对不起,我忘了。它是一个列表列表,里面有数字,比如 Price_Cube。
  • 请注意,您有参数 retall=True 它仍然会返回相同的错误

标签: python optimization scipy minimum fminsearch


【解决方案1】:

问题是您尝试将fmin 的返回值分配给两个变量xoptfopt,但默认情况下fmin 只返回xopt。你应该试试

xopt = scipy.optimize.fmin(func=banana, x0=[Vol_Cube[0][0]])

如果您还希望函数值最小,则必须将full_output 设置为True,然后您还可以获得更多诊断:

xopt, fopt, iter, funccalls, warnflags = scipy.optimize.fmin(func=banana, x0=[Vol_Cube[0][0]], full_output=True)

【讨论】:

  • 非常感谢,在您的帮助下我已经解决了问题。
猜你喜欢
  • 1970-01-01
  • 2013-04-04
  • 2011-02-18
  • 1970-01-01
  • 1970-01-01
  • 2011-05-29
  • 1970-01-01
相关资源
最近更新 更多