我有一个 2D np.array 作为实验数据,所以形状像(50,50),对应于我的凸轮的像素。对于每个点的错误,我都有第二个相同形状的 np.array。所以我的错误不仅仅是 sqrt(n)。我想使用这些错误进行拟合,因此使用 sum( (experimental - function)^2 / (error of the pixel)^2 )。
到目前为止,为了处理 2D,我只是将我的错误函数展平为最小平方的输入。这完美地工作。因此,考虑到错误,我有合适的参数。但是有一个问题:我如何告诉 leastsq 它也必须使用它们来计算我的 fitparameters 的误差?我查看了curve_fit,但它似乎绝对不是为我的情况设计的。在我看来,它需要一个函数,您可以将 x 作为输入。但是通过我的卷积,我不能简单地将 x 值转换为 y 值。
那么有没有办法用 minimumsq、curve_fit 或其他函数来做到这一点?
这是脚本,没有考虑 fitparameters 的错误:
#img is my experimental data, errimg the array with the errors.
#My fitfunction is a convolution of a bivariate_normal with a circular
#box-function given by a function i called ellipsenmatrix.
tx = np.arange(-100,100,1.)
ty = np.arange(-100,100,1.)
X, Y = np.meshgrid(tx, ty)
circ= lambda x: ellipsenmatrix([24.,24.,x],shape=img.shape,kreis='on')
def fitfunc(v):
conv= ndimage.convolve( circ(v[4]), mlab.bivariate_normal(X, Y, v[0], v[1], v[2], v[3], 0) )
conv/=np.sum(conv)
return conv
errfunc = lambda v: ( (fitfunc(v) - img) /errimg ).flatten()
vinit=[2.5,2.5,0,0,27.5]
vend, kovmtx, einstell, mesg, success = optimize.leastsq(errfunc, vinit, full_output=True)
print vend