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) > >