【问题标题】:Python - scipy fmin, giving the arguments to fminPython - scipy fmin,将参数提供给 fmin
【发布时间】:2025-11-30 15:35:01
【问题描述】:

我是 Python 的新手。 我正在编写一小段代码以找到函数的最小值:

import os,sys,matplotlib,pylab
import numpy as np
from scipy.optimize import fmin

par = [2., 0.5, 0.008]
x1 = 0.4
f2_2 = lambda x, param: param[0] * x**2 + param[1] * x + param[2]
xmin = fmin(f2_2,x1,args = (par))

print xmin

应该很简单,但是我收到了这个错误:

"Traceback (most recent call last):

  File "prova.fmin.py", line 9, in <module>

 xmin = fmin(f2_2,x1,args = (par))

  File "/usr/lib/python2.7/dist-packages/scipy/optimize/optimize.py", line 257, in fmin

 fsim[0] = func(x0)

  File "/usr/lib/python2.7/dist-packages/scipy/optimize/optimize.py", line 176, in function_wrapper

 return function(x, *args)

TypeError: <lambda>() takes exactly 2 arguments (4 given)"

有人可以帮我理解这个吗?

【问题讨论】:

    标签: python numpy scipy


    【解决方案1】:

    我刚试过这个。看起来你需要说(par,) 而不仅仅是(par)。请注意(par,) 是一个元组,变量par 作为单个元素,而(par) 仅计算为par:没有元组。 fmin 的“args”关键字期望找到一个元组,而不是 par,在本例中是一个列表。

    编辑: 好吧,实际上,args 似乎也不介意接收列表。但是,在fmin 内部,当函数f2_2 被调用时,argsunpacked,这意味着它的内容现在作为参数传递给f2_2。这意味着f2_2 最终得到四个参数,即。在这种情况下,x20.50.008,而不是只获取两个参数 x[2, 0.5, 0.008]

    【讨论】:

    • 知道了!非常感谢,这可能解决了我在提出论点时遇到的一些问题,例如,curve_fit...
    【解决方案2】:

    你需要定义 lambda 函数来接受更多的参数,像这样:

    f2_2 = lambda x, *param: param[0] * x**2 + param[1] * x + param[2]
    

    【讨论】:

    • 也谢谢你,我不知道这是可能的!