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.