3

を使用して関数をデータに適合させようとしていますscipy.optimize.curvefit

Q=optimization.curve_fit(func,X,Y, x0,ERR)

そしてそれはうまくいきます。

しかし、今私は非対称エラーを使用しようとしていますが、それを行う方法がわかりません。

3+-0.5非対称エラーとは、エラーがたとえばではないことを意味します3 +0.6 -0.2。そのため、ERR は 2 列の配列です。

誰かがそれを行う方法を知っていれば素晴らしいと思います-または、それを行うことができる別のPythonルーチンを指摘できます.

私が使用しているコードのスニペットですが、それがより明確になるかどうかはわかりません:

A=numpy.genfromtxt('WF.dat')
cc=A[:,4]
def func(A,a1,b1,c1):
    N=numpy.zeros(len(x))
    for i in range(len(x)):
        N[i]=1.0*erf(a1*(A[i,1]-c1*A[i,0]**b1))

return N


x0   = numpy.array([2.5  , -0.07 ,-5.0])
Q=optimization.curve_fit(func,A,cc, x0, Error)

And Error=[ErP,ErM] (2列)

4

4 に答える 4

1

現在のバージョンでは、残念ながら実行できません。curve_fitは、人気のある Fortran ライブラリのラップアラウンドminipackです。のソース コードを確認すると、次の\scipy_install_path\optimize\minipack.pyように表示されます: (行 498-509):

if sigma is None:
    func = _general_function
else:
    func = _weighted_general_function
    args += (1.0/asarray(sigma),)

基本的には ofsigmaが提供されていないことを意味し、重み付けされていない Levenberg-Marquardt メソッドminipackが呼び出されます。が指定されている場合sigma、重み付けされた LM が呼び出されます。つまり、 を指定する場合sigmaは、Xまたはと同じ長さの配列として指定する必要がありますY

つまり、非対称エラー残差を onYにしたい場合は、@Jaime が提案したように、ターゲット関数に何らかの変更を加える必要があります。

于 2013-10-01T15:15:32.707 に答える
0

100% 確信があるわけではありませんが、PAIDAパッケージは非対称エラーに適合する可能性があるようです:

http://payda.sourceforge.net/documentation/fitter/index.html

于 2013-10-01T15:34:09.903 に答える