我试图寻找和我犯同样错误的人,但没有快乐!这也是我的第一篇文章,所以如果解释或指导不当,我深表歉意。欢迎咨询。
我正在解决的问题是:通过测量到多个已知参考点的距离来找到某种接收器的位置。这是基本的三边测量,我正在使用最小二乘法来做到这一点。
我已经成功地使用了 scipy.optimize lesatsq 函数来做到这一点,所以我很确定我的拟合函数有效。但是,我希望能够使用 lmfit Python 包提供的一些额外功能,并且我正在努力将其翻译过来。完整的尝试代码在这里: http: //pastebin.com/4xbfkaCm
lmfit 最小化函数设置对我的拟合函数(称为残差函数)的调用如下,其中 stationarray 是一个包含站点位置和范围的 numpy 数组,params 是要在拟合函数中使用的参数字典
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 作为参数传递而引发的,但这似乎是不可避免的。谁能看到我做错了什么?
谢谢