私は実験データとして 2D np.array を持っているので、カムのピクセルに対応する (50,50) のような形状のものです。各ポイントのエラーに対して同じ形状の 2 番目の np.array があります。したがって、私のエラーは sqrt(n) だけではありません。これらの誤差を適合に使用したいので、 sum( (experimental - function)^2 / (error of the pixel)^2 ) を使用します。
これまでは、2D を処理するために、最小平方の入力としてエラー関数を平坦化していました。これは完全に機能します。したがって、エラーを考慮してパラメーターを適合させます。しかし、問題が 1 つあります。fitparameters の誤差を計算するためにも使用するように、leastsq に指示するにはどうすればよいですか? 私はcurve_fitを見ましたが、私の場合には絶対に設計されていないようです。入力として x を与えることができる関数が必要なようです。しかし、私の畳み込みでは、x 値を y 値に単純に変換することはできません。
それで、leastsq、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