Mathematica 9 is now available
Services & Resources / Wolfram Forums / MathGroup Archive
-----

MathGroup Archive 2011

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Fitting Experimental Data

  • To: mathgroup at smc.vnet.net
  • Subject: [mg116478] Re: Fitting Experimental Data
  • From: Alexei Boulbitch <alexei.boulbitch at iee.lu>
  • Date: Wed, 16 Feb 2011 06:44:30 -0500 (EST)

Dear Mathilde,

I have several points concerning your question:

1. I am not quite sure, if I caught you right, but your description sounds as if you should model your
    data by two Gaussians, rather than one. At least like this I understood the words: "data looking like
    a plot with two round (more Gaussian) shape". If this is indeed the case you should take a model
    consisting of sum of two Gaussians.

2. It would be helpful, if you give an example of your data massive. You cannot attach a file, but you could include the
    data as a plain text say, below your question. Then we could play with it.

3. Do you have serious reasons to think that the data should be fitted by true Gaussians? For example, do you know that the prefactor
    MUST provide normalization? Otherwise you could try a more simple model:  model = a*Exp[-b (x - m)^2] + c. This could help, since
    the calculation for Mathematica will be simplified. You anyway include the pre-factor
    a in your model, so the pre-factor  1/(Sqrt[2 \[Pi]] s) only seems to introduce an unnecessary complexity into the calculation.

4. In principle, I would try to avoid to drop experimental points. The fitting procedure does not require this. One alternative
    to fitting would be to use Manipulate and to find the values of the parameters manually. To illustrate this possibility
    evaluate the following and play with sliders:

(* This produces an array named "tab" with two almost Gaussian peaks *)
f[x_] = 3 (Exp[-2*(x - 1)^2] + Exp[-7*(x - 2)^2]);
tab = Table[{x, f[x] + RandomReal[{-0.3, 0.3}]}, {x, 0, 3, 0.05}];

(* and this plots the double Gaussian on the background of the array *)
Manipulate[
  Show[{
    ListPlot[tab, PlotStyle ->  Red, PlotRange ->  All],
    Plot[a1*Exp[-b1*(x - c1)^2] + a2*Exp[-b2*(x - c2)^2], {x, 0, 3},
     PlotStyle ->  Blue]
       }],
  {{a1, 3}, 1, 5}, {{b1, 2}, 1, 10}, {{c1, 1}, 0, 3},
  {{a2, 2}, 1, 5}, {{b2, 7}, 1, 10}, {{c2, 2}, 0, 3}

  ]


You can apply a hybrid approach, that is first find the function manually as it is illustrated above, and then take the obtained
function as a first guess for the FindFit procedure thus, refining the parameters values.

Alternatively within the Manipulate you can count the sum of squares of residuals, and stop varying parameters as soon as this
sum is mimimum.

5. You can go for smoothing of your data instead of dropping. Check Help/MovingAverage. After smoothing your fitting may become
    easier.

Have fun, Alexei









I am in trouble in trying to do a Fit using Mathematica7.

Here my problem:

My instrument on which I am working is giving me data looking like a plot with two round (more Gaussian) shape but with some picks on the top of each, the figures would have shown it, but you told me that I cannot enclose any file.

I am only interested in the 2 round shapes, .

My goal is to do a fit of those them.

First I am isolating those 2 parts (ie: Plotting them whithout the data between them.)

But the problem is that the picks on the top of each round shape will disturber my
fit so I have to remove them.So now I have removed the picks, I have just 2 kind of asymetrics Gaussians with a hall on the top of each. To describe it more properly, I would say I have the rising and falling edge of two differente asymetric Gaussian.

Now I start to look for a first Fit corresponding to the first asymetric Gaussian.

Here is my code:

model=
b+ a*(1/(s*\[Sqrt](2*Pi)))*
Exp[-(x-m)^2/(2*s^2)];

fit=FindFit[dataleftlowband,model,{b,a,s,m}, x, MaxIterations->100]

modelfit = Table[Evaluate[model/.fit],{x,1,Length[dataleftlowband]}];

tmodelfit = Transpose[{xdataleftlowband,modelfit}];

My big problem is that I removed some data
in the middle of my curve and I want that according to the values kept, the
fitting find out which should be the missing values, because I need to
approximately trace the top of my Gaussian shape.

I've tried a lot of stuff to find out how
to solve that as, random points in the Gap...

Is there a method like considering the
first part as the rising edge and the second as the falling edge of a Gaussian?

Is Mathematica able to solve that?

I hope that my problem is clearly explained. It's not that easy without any pictures to show how my data look like.

Tell me if you have any idea to find a solution.

Thank you in advance

FAVIER MathildeTel: + 33 (0)6 35 29 36 96fmath at hotmail.fr 		

-- 
Alexei Boulbitch, Dr. habil.
Senior Scientist
Material Development

IEE S.A.
ZAE Weiergewan
11, rue Edmond Reuter
L-5326 CONTERN
Luxembourg

Tel: +352 2454 2566
Fax: +352 2454 3566
Mobile: +49 (0) 151 52 40 66 44

e-mail: alexei.boulbitch at iee.lu

www.iee.lu

--

This e-mail may contain trade secrets or privileged, undisclosed or
otherwise confidential information. If you are not the intended
recipient and have received this e-mail in error, you are hereby
notified that any review, copying or distribution of it is strictly
prohibited. Please inform us immediately and destroy the original
transmittal from your system. Thank you for your co-operation.



  • Prev by Date: DatabaseLink and 64bit MSAccess ODBC driver woes
  • Next by Date: Google Scholar web query
  • Previous by thread: Re: Fitting Experimental Data
  • Next by thread: Re: Fitting Experimental Data