在 IDL 中使用 MPFIT 拟合用户定义的函数

Fitting user defined function with MPFIT in IDL

我正在尝试将以下形式的衰减指数函数拟合:A1 - A1exp(-x/A2) 到一组 (x,y) 值,在 y 值上带有误差条。我正在使用 IDL MPFIT 函数来执行此非线性拟合。

function gfunct, xsig, A
return, A[0] - A[0]*exp(-xsig/A[1])
end

pro makeit

xsig=[0d0,4d0,12d0,48d0]
ysig=[0d0,19d0,30d0,36d0]
err=dblarr(1,4)
err[0]=0.000001d0
err[1]=0.5d0*0.4219d0*19d0
err[2]=0.5d0*0.2154d0*30d0
err[3]=0.5d0*0.1279d0*36d0


A = [39d0,10.96d0]
result = MPFITFUN('gfunct', xsig, ysig, err, start)
end

但是这段代码给我一个错误:

 MPFITFUN: ERROR: must pass parameters in P or PARINFO

谁能帮我确定功能块的正确语法?我尝试使用 svdfit 但它不能用于像这样的函数,A[1] 在指数中。 谢谢!

MPFITFUN 的调用顺序是

parms = MPFITFUN(MYFUNCT, X, Y, ERR, start_params, ...);

这意味着你应该这样称呼它:

result = MPFITFUN('gfunct', xsig, ysig, err, A)

因为 "A" 包含您最初的猜测。