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

Home » Public Forums » archive » Re: Trouble with MPFITFUN
Show: Today's Messages :: Show Polls :: Message Navigator
E-mail to friend 
Return to the default flat view Create a new topic Submit Reply
Re: Trouble with MPFITFUN [message #79942 is a reply to message #79941] Wed, 11 April 2012 12:51 Go to previous messageGo to previous message
Helder Marchetto is currently offline  Helder Marchetto
Messages: 520
Registered: November 2011
Senior Member
On Wednesday, April 11, 2012 8:08:31 PM UTC+2, Helder wrote:
> On Wednesday, April 11, 2012 6:34:23 PM UTC+2, Helder wrote:
>> 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.
>
> Ok, just had some dinner and the head is a bit clearer now. I think everything is working fine. The only problem is that the square residuals don't change a lot when changing the position of the step. It's like finding the minimum on a flat 100 square meter surface with a little 1 square cm hole hidden somewhere...
>
> I think this is it, if anybody has a suggestion on how to better estimate the step, that would be appreciated... I'll go for dessert and maybe get a good idea on how to do that.
>
> Cheers,
> Helder

Ok, even dessert helped. By doing a smooth+deriv operations and then fitting the peak, I can get quite reliably a peak.
I think I'll try to delete this post tomorrow and insert it in the hall of shame...
Cheers, h
[Message index]
 
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Previous Topic: Non linear fit with more than 2 dimensions!, does mpfit work?
Next Topic: Re: Non linear fit with more than 2 dimensions!, does mpfit work?

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

Current Time: Fri Oct 10 08:03:28 PDT 2025

Total time taken to generate the page: 1.35911 seconds