Re: Voigt function fit using MPFIT [message #86089 is a reply to message #86086] |
Wed, 02 October 2013 05:47   |
Helder Marchetto
Messages: 520 Registered: November 2011
|
Senior Member |
|
|
On Wednesday, October 2, 2013 1:12:55 PM UTC+2, Sreelakshmi S wrote:
> Hi,
>
>
>
> I have a set of observed data of flux vs wavelength.I am trying MPFIT to fit a voigt function. I defined the function as
>
>
>
> FUNCTION fit,p,X=x2,Y=nflux2
>
>
>
> model=double((voigt(p[0],p[1])*1e-13)/(p[3]*sqrt(!pi)))
>
> return,(Y-model)/err
>
>
>
> END
>
>
>
> But when I run this, the following errors are coming
>
>
>
> FUNCTION fit,x2=X,nflux2=Y,p
>
> ^
>
> % Programs can't be compiled from single statement mode.
>
>
>
>
>
> return,(Y-model)/1
>
> ^
>
> % Syntax error.
>
>
>
> Why is this happening?
Well, there are a number of things wrong.
1) If you define the function with
FUNCTION Fit, Y=nFlux2
then you must use nFlux2 in your code, not Y.
Try making a function like this:
FUNCTION Fit, Y=nFlux2
PRINT, (N_ELEMENTS(Y) NE 0)?'Y Exist':'Y does not exist'
PRINT, (N_ELEMENTS(nFlux2) NE 0)?'nFlux2 Exist':'nFlux2 does not exist'
RETURN, ''
END
and look at the result of the following commands:
print, Fit(Y=5)
print, Fit(/Y)
print, Fit()
print, Fit(nFlux2=5)
This way you should learn something about passing variables.
2) How are you calling the function? I have the feeling that this is not happening from inside another program or from within IDL.
3) Are you sure there is no other function named fit? The first line of the function you wrote and the one showed are different.
4) In your Voigt function you use parameters p[0], p[1], p[3]. Is there a reason for skipping [2]?
5) The variable "err" is not defined in the function. This will for sure through an error. (well what should an err variable do anyway!)
6) Passing two scalar values to the function will return a scalar value. Is that what you want? I don't think so...
7) I think that the NASA library has some Voigt fit functions... did you look at those?
Regards,
Helder
|
|
|