Re: Fitting question
- To: mathgroup at smc.vnet.net
- Subject: [mg51597] Re: [mg51585] Fitting question
- From: Bob Hanlon <hanlonr at cox.net>
- Date: Wed, 27 Oct 2004 01:53:57 -0400 (EDT)
- Reply-to: hanlonr at cox.net
- Sender: owner-wri-mathgroup at wolfram.com
Use NonlinearFit
Needs["Statistics`NonlinearFit`"];
totpergen={1,22,113,432,1167,2647,
4717,7285,9609,10701,11058,10292,
8717,6773,4895,3324,1997,1123,
609,297,158,88,44,12,6};
f[x_] := Evaluate[
NonlinearFit[totpergen,
a*E^(-c*x)/(b+E^(-c*x))^2,
x, {a,b,c}]];
DisplayTogether[
Plot[f[x], {x,1,Length[totpergen]},
PlotStyle->Blue,
PlotRange->All,
Frame->True, Axes->False],
ListPlot[totpergen,
PlotStyle->Red]];
Bob Hanlon
>
> From: János <janos.lobb at yale.edu>
To: mathgroup at smc.vnet.net
> Date: 2004/10/23 Sat AM 12:22:57 EDT
> To: mathgroup at smc.vnet.net
> Subject: [mg51597] [mg51585] Fitting question
>
> I have two lists. One of them contains the running total of some
> quantity per cycles, the other contains the totals per cycles. Here
> they are:
>
> In[35]:=
> runtotpergen = {1, 23, 136,
> 568, 1735, 4382, 9099,
> 16384, 25993, 36694,
> 47752, 58044, 66761,
> 73534, 78429, 81753,
> 83750, 84873, 85482,
> 85779, 85937, 86025,
> 86069, 86081, 86087}
>
> In[36]:=
> totpergen = {1, 22, 113, 432,
> 1167, 2647, 4717, 7285,
> 9609, 10701, 11058, 10292,
> 8717, 6773, 4895, 3324,
> 1997, 1123, 609, 297, 158,
> 88, 44, 12, 6}
>
> I am trying to find out the analytical form of a function which fits
> best totpergen. Looking the ListPlot of runtotpergen, it looks
> similar to the sigmoid function, so I define:
> In[37]:=
> sg[x_] := 1/(1 + E^(-x))
>
> and
> In[38]:=
> dsg = Derivative[1][sg]
>
> The best I could come out with manual try was:
>
> In[40]:=
> dsgfit = Fit[totpergen,
> {dsg[0.48*(x - 11)]}, x]
> Out[40]=
> 44143.063409020484/
> (E^(0.48*(-11 + x))*
> (1 + E^(-0.48*(-11 + x)))^
> 2)
>
> When I create the plots of the data totpergen and the above Fit dsgfit
> as:
>
> In[41]:=
> lsp = ListPlot[totpergen,
> PlotRange -> All]
> In[42]:=
> psp = Plot[dsgfit, {x, 1, 25}]
>
> and plot them together, they overlap to some degree, but not to my
> satisfaction.
>
> In[43]:=
> Show[lsp, psp]
>
> totpergen is not symmetrical, so I tried different multiplications of
> x^n and dsg without any success. I also tried the polynomials of dsg
> like:
>
> In[83]:=
> polydsgfit = Fit[totpergen,
> {1, dsg[x - 11],
> dsg[x - 11]^2,
> dsg[x - 11]^3,
> dsg[x - 11]^4}, x]
>
> but it just looks funny.
>
> I also tried:
>
> In[92]:=
> paramdsgfit = FindFit[
> totpergen,
> a*dsg[b*x - c] + d,
> {a, b, c, d}, x]
> Out[92]=
> {a -> -2250.9485483974095,
> b -> -14745.171180125675,
> c -> 111324.17194273268,
> d -> 3443.48}
>
> but it gave me just a horizontal line when I plotted it.
>
> In[101]:=
> ip = InterpolatingPolynomial[
> totpergen, x]
>
> does not help either.
> I feel that Mathematica has the capability to find the best fitting
> function without too much manual trials. Any hint how to do that ?
>
> Thanks ahead.
>
> János
> ----------------------------------------------
> Trying to argue with a politician is like lifting up the head of a
> corpse.
> (S. Lem: His Master Voice)
>
>