MathGroup Archive 2008

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

Search the Archive

Re: parameters problem in FindFit

  • To: mathgroup at smc.vnet.net
  • Subject: [mg92865] Re: parameters problem in FindFit
  • From: Jean-Marc Gulliet <jeanmarc.gulliet at gmail.com>
  • Date: Thu, 16 Oct 2008 05:04:15 -0400 (EDT)
  • Organization: The Open University, Milton Keynes, UK
  • References: <gd4dl4$bg2$1@smc.vnet.net>

gyzhou at 139.com wrote:

>   I get a list like this :
>     lis = {{12.5, 1.146}, {32, 1.145}, {50,
>    1.144}, {69, 1.1424}, {84.6,
>    1.139}}
> My aim is :
>   FindFit[lis,
>    a - (b x^2)/(c + x), {{a, 1.14}, {b, 0.0003}, {c, 300}}, x]
> As we can see, I want this list to be fitted using parameters a, b, c
> around 1.14, 0.0003, 300. However Mathematica gives { b, 10^8} and {c,
>    10^14} far from what I expect.I set "MaxIterations" to less times,
> but it doesn' t make sense.

If you plot your model with the parameters returned by FindFit, you will 
see that the fit is quite good. OTHO, the choice of 300 for c seems to 
be a poor choice (except if you have some compelling reason from the 
physical situation your are modeling). Anyway, try to use different 
methods as illustrated below and check the result on a graph.

In[1]:= lst = {{12.5, 1.146}, {32, 1.145}, {50, 1.144}, {69,
     1.1424}, {84.6, 1.139}};

In[2]:= model = a - (b x^2)/(c + x);

In[3]:= sol =
  FindFit[lst, model, {{a, 1.14}, {b, 0.0003}, {c, 300}}, x]

Out[3]= {a -> 1.14624, b -> 2.45466*10^8, c -> 2.59133*10^14}

In[4]:= solar =
  FindFit[lst, model, {a, b, c}, x,
     Method -> #] & /@ {"ConjugateGradient", "Gradient",
    "LevenbergMarquardt", "Newton", "QuasiNewton"}

During evaluation of In[4]:= FindFit::lstol: The line search \
decreased the step size to within tolerance specified by AccuracyGoal \
and PrecisionGoal but was unable to find a sufficient decrease in the \
norm of the residual.  You may need more than MachinePrecision digits \
of working precision to meet these tolerances. >>

Out[4]= {{a -> 1.14769, b -> 0.0000906534,
   c -> 1.01529}, {a -> 1.14769, b -> 0.0000906534,
   c -> 1.01529}, {a -> 1.14624, b -> 1.49101*10^8,
   c -> 1.57403*10^14}, {a -> 1.14388, b -> 9.6559*10^-6,
   c -> -37.5354}, {a -> 1.14769, b -> 0.0000906531, c -> 1.01317}}

In[5]:= Plot[{model /. sol, model /. solar[[1]],
   model /. {a -> 1.14, b -> 0.0003, c -> 300}}, {x, 10, 100},
  Epilog -> Point /@ lst]

In[6]:= sol =
  FindFit[lst, model, {{a, 1.14}, {b, 0.0003}, {c, 300}}, x,
     Method -> #] & /@ {"ConjugateGradient", "Gradient",
    "LevenbergMarquardt", "Newton", "QuasiNewton"}

During evaluation of In[6]:= FindFit::lstol: The line search \
decreased the step size to within tolerance specified by AccuracyGoal \
and PrecisionGoal but was unable to find a sufficient decrease in the \
norm of the residual.  You may need more than MachinePrecision digits \
of working precision to meet these tolerances. >>

During evaluation of In[6]:= FindFit::lstol: The line search \
decreased the step size to within tolerance specified by AccuracyGoal \
and PrecisionGoal but was unable to find a sufficient decrease in the \
norm of the residual.  You may need more than MachinePrecision digits \
of working precision to meet these tolerances. >>

During evaluation of In[6]:= FindFit::lstol: The line search \
decreased the step size to within tolerance specified by AccuracyGoal \
and PrecisionGoal but was unable to find a sufficient decrease in the \
norm of the residual.  You may need more than MachinePrecision digits \
of working precision to meet these tolerances. >>

During evaluation of In[6]:= General::stop: Further output of \
FindFit::lstol will be suppressed during this calculation. >>

Out[6]= {{a -> 1.14637, b -> 0.000365391, c -> 300.}, {a -> 1.14637,
   b -> 0.000365391, c -> 300.}, {a -> 1.14624, b -> 2.45466*10^8,
   c -> 2.59133*10^14}, {a -> 1.14624, b -> 4.13776,
   c -> 4.36807*10^6}, {a -> 1.14637, b -> 0.000365391, c -> 300.}}

HTH,
-- Jean-Marc



  • Prev by Date: Re: Re: naive question
  • Next by Date: Re: Newbie question: equations with sums.
  • Previous by thread: Re: parameters problem in FindFit
  • Next by thread: Partial Differential Equations