MathGroup Archive 2011

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

Search the Archive

Re: FindFit bug

  • To: mathgroup at smc.vnet.net
  • Subject: [mg116077] Re: FindFit bug
  • From: "Sjoerd C. de Vries" <sjoerd.c.devries at gmail.com>
  • Date: Tue, 1 Feb 2011 06:52:54 -0500 (EST)
  • References: <ii5rhr$fh4$1@smc.vnet.net>

This is not a bug.

As the documentation of FindFit clearly states: "In the nonlinear
case, it finds in general only a locally optimal fit."

So, Mathematica has found a local optimum but not a global one due to
its starting values of the parameters. Try providing some starting
parameters that are in the right neighbourhod and you'll see it finds
a much better fit:

fit = FindFit[dat, a Sin[w t + f], {{a, 3.3}, {w, 2.5}, {f, 1.5}}, t]
{a -> 3., w -> 3., f -> 1.}

Another option would be to experiment with different methods:

In[10]:= FindFit[dat, a Sin[w t + f], {a, w, f}, t,
   Method -> #] & /@ {"ConjugateGradient", "Gradient",
  "LevenbergMarquardt", "Newton", "NMinimize", "QuasiNewton"}


Out[10]= {{a -> 8.68943, w -> 0.0199648,
  f -> 0.00865477}, {a -> 2.54082, w -> 0.0678487,
  f -> 0.0294072}, {a -> 0.599211, w -> 1.51494,
  f -> 3.80421}, {a -> 53.7406, w -> 0.00322877,
  f -> 0.00139811}, {a -> -3., w -> -3., f -> -1.}, {a -> 24.9028,
  w -> 0.00696196, f -> 0.00301903}}

In this case NMinimize seems to be the best choice.

Cheers -- Sjoerd

On Jan 31, 9:23 am, Igor <igor.vol... at gmail.com> wrote:
> Hello,
> It seems that FindFit cannot fit a sine function.
> It produces no warnings and gives a totally
> wrong answer:
>
> dat = Table[{t, 3 Sin[3 t + 1]}, {t, -3, 3, 0.1}];
>
> fit = FindFit[dat, a Sin[w t + f], {a, w, f}, t]
>
> Show[ListPlot[dat], Plot[a Sin[w t + f] /. fit, {t, -3, 3}]]
>
> Output: {a -> 0.599211, w -> 1.51494, f -> 3.80421}
>
> At the same time it fits Sin[3t+1] just fine.



  • Prev by Date: Re: FindFit bug
  • Next by Date: Re: Problems integrating InterpolatingFunction
  • Previous by thread: Re: FindFit bug
  • Next by thread: Re: FindFit bug