为什么我的python lmfit leastsq fitting函数传递了太多参数?

为什么我的python lmfit leastsq fitting函数传递了太多参数?,python,scipy,least-squares,trilateration,Python,Scipy,Least Squares,Trilateration,我试着去寻找一个和我犯同样错误的人,但是没有找到快乐!这也是我的第一篇文章,所以如果解释或指导不当,我表示歉意。欢迎指教 我要解决的问题是:通过测量到多个已知参考点的距离来找到某种接收器的位置。这是基本的三边测量,我用最小二乘法来做 我已经成功地使用了scipy.optimize lesatsq函数来实现这一点,所以我非常确定我的拟合函数可以工作。但是,我希望能够使用lmfitpython包提供的一些额外功能,我正在努力将其转换为其他版本。完整的尝试代码如下: lmfit minimize函数设

我试着去寻找一个和我犯同样错误的人,但是没有找到快乐!这也是我的第一篇文章,所以如果解释或指导不当,我表示歉意。欢迎指教

我要解决的问题是:通过测量到多个已知参考点的距离来找到某种接收器的位置。这是基本的三边测量,我用最小二乘法来做

我已经成功地使用了scipy.optimize lesatsq函数来实现这一点,所以我非常确定我的拟合函数可以工作。但是,我希望能够使用lmfitpython包提供的一些额外功能,我正在努力将其转换为其他版本。完整的尝试代码如下:

lmfit minimize函数设置对my fitting函数(称为residualfunct)的调用,如下所示,其中stationarray是一个包含站点位置和范围的numpy数组,params是fitting函数中要使用的参数字典

position = minimize(residualfunct, params, args=(stationarray))
我的拟合函数定义为

def residualfunct(params, stationarray):

    X = params['solutionX'].value
    Y = params['solutionY'].value
    Z = params['solutionZ'].value
    result = numpy.array([s[3] - linalg.norm(array((X,Y,Z))-array((s[0],s[1],s[2]))) for s in stationarray])
    print result
    return result
当我运行这段代码时,我得到了TypeError:

residualfunct()正好接受2个参数(给定5个)

由于这个调用是由最小化函数进行的,所以我看不出对此有什么控制。我只能想象,之所以提出这个问题,是因为我将np.array作为参数传递,但这似乎是不可避免的。有人能看出我做错了什么吗


感谢在呼叫
最小化
,更改

args=(stationarray)


args
必须是一个序列(通常是元组),其元素是传递给函数的参数。要创建长度为1的元组,需要额外的逗号。当您编写
args=(stationarray)
(不带额外的逗号)时,括号无效,这与编写
args=stationarray
相同
minimize
然后调用函数作为剩余函数(params,stationarray[0],stationarray[1],…),这会导致您报告的错误。

在调用
minimize
时,更改

args=(stationarray)


args
必须是一个序列(通常是元组),其元素是传递给函数的参数。要创建长度为1的元组,需要额外的逗号。当您编写
args=(stationarray)
(不带额外的逗号)时,括号无效,这与编写
args=stationarray
相同
minimize
然后调用函数作为剩余函数(params,stationarray[0],stationarray[1],…),这将导致您报告的错误。

您需要显示完整的回溯,因为它将显示调用函数的内容及其传递的内容。您需要显示完整的回溯,因为它将显示调用函数的内容和传递的内容。非常感谢,这非常有效,并且(在解决了我后来发现的所有其他问题之后:)代码现在可以按照我的需要工作了。如果我有足够的声誉,我会投票的。非常感谢,这工作非常完美,(在解决了我后来发现的所有其他问题之后:)代码现在可以按我需要的方式工作了。如果我有足够的声誉,我会投票。