comp.lang.idl-pvwave archive
Messages from Usenet group comp.lang.idl-pvwave, compiled by Paulo Penteado

Home » Public Forums » archive » Trouble with MPFITFUN
Show: Today's Messages :: Show Polls :: Message Navigator
E-mail to friend 
Switch to threaded view of this topic Create a new topic Submit Reply
Trouble with MPFITFUN [message #79947] Wed, 11 April 2012 09:34
Helder Marchetto is currently offline  Helder Marchetto
Messages: 520
Registered: November 2011
Senior Member
Hi,
I've been spending a bit too much time on this and I am wondering what is going wrong here.
I'm trying to fit using a step function broadened by a Gaussian.
The fitting function is:

FUNCTION GaussStep, X, P
;Calculate the broadening of a step function with:
;P[0] = step position
;P[1] = left value
;P[2] = right value
;P[3] = step width
PRINT, P
P[0] = (P[0] > MIN(X)) < MAX(X)
Y = DBLARR(N_ELEMENTS(X))
LowIndeces = WHERE(X LT P[0], CountLow, COMPLEMENT = HighIndeces, NCOMPLEMENT=CountHigh)
IF CountLow GT 0 THEN Y[LowIndeces] = P[1]
IF CountHigh GT 0 THEN Y[HighIndeces] = P[2]
Sigma=P[3]
nPts=10*Sigma+1.0
kernel=DINDGEN(nPts)-(nPts-1)/2.0
kernel=EXP(-kernel^2/(2.*sigma^2))
kernel/=TOTAL(kernel,/DOUBLE)
yconvol = CONVOL(Y,kernel,/EDGE_TRUNCATE)
RETURN, yconvol
END

To test MPFITFUN I use the following code:
PRO TestFit
xData = DINDGEN(201)
yData = DBLARR(201)+RANDOMU(SEED,201,/DOUBLE)*0.2-0.1
yData[150:200] += 1.0D
StParam = [148D,MIN(yData),MAX(yData),3D]
DataErr = DBLARR(N_ELEMENTS(xData))+0.2D
Results = MPFITFUN('GaussStep', xData,yData, DataErr, StParam, STATUS=status, /quiet)
PLOT, xData, yData
OPLOT, xData, GaussStep(xData,Results), COLOR = 255L
PRINT, 'Final Parameters = ', Results
PRINT, 'Start Parameters = ', StParam
END

The output shows all the calls of the fitting function. And I find that at the end there is always NO change in the first parameter. Here is an example of the output:

148.00000 -0.099990073 1.0994661 3.0000000
148.00000 -0.099990073 1.0994661 3.0000000
148.00000 -0.099990071 1.0994661 3.0000000
148.00000 -0.099990073 1.0994661 3.0000000
148.00000 -0.099990073 1.0994661 3.0000000
148.00000 0.0073445709 1.0082363 2.3488363
148.00000 0.0073445709 1.0082363 2.3488363
148.00000 0.0073445710 1.0082363 2.3488363
...
148.00000 -0.0039705287 0.99188729 2.0999998
148.00000 -0.0039705257 0.99188729 2.1000000
148.00000 -0.0039705254 0.99188729 2.1000000
148.00000 -0.0039705254 0.99188729 2.1000000
Final Parameters = 148.00000 -0.0039705254 0.99188729 2.1000000
Start Parameters = 148.00000 -0.095071379 1.0978406 3.0000000

Throughout all the fitting procedure the first parameter has never been changed.

Am I doing something terribly wrong? I generally have no estimates for the errors in the data, therefore I used 0.1. In the example data this is easy to calculate, but the fitting has to be applied to the most different data sets.

I also tried playing with the XTOL parameter without any success.

Any tips are appreciated.

Many thanks,
Helder

PS: I tried lots of different initial conditions, I tried using "parinfo.fixed" to block the other parameters, ... but at the end I never get any change in P[0]... sigh..

PSS: The function GaussStep is working fine... I can replot the data in the correct way by moving the parameters by hand.
  Switch to threaded view of this topic Create a new topic Submit Reply
Previous Topic: Re: Reading data, without column header
Next Topic: cgHistoplot and logarithmic axes

-=] Back to Top [=-
[ Syndicate this forum (XML) ] [ RSS ] [ PDF ]

Current Time: Wed Oct 08 18:52:15 PDT 2025

Total time taken to generate the page: 0.00627 seconds