Re: Re: NonlinearFit works not so good
- To: mathgroup at smc.vnet.net
- Subject: [mg49651] Re: [mg49587] Re: NonlinearFit works not so good
- From: stephen layland <layland at wolfram.com>
- Date: Mon, 26 Jul 2004 04:01:55 -0400 (EDT)
- Mail-followup-to: mathgroup@smc.vnet.net
- References: <cdqqa4$kkd$1@smc.vnet.net> <200407240747.DAA05792@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
so spake Kevin J. McCann [2004.07.24 @ 06:56]: > I am a simple kinda guy; so, I tend to use a "roll-your-own" LSQ whenever > possible. I do this especially when I have a multivariate fit. The real > problem is that it is that there is no single answer due to the periodicity > of the sine. This makes a numerical search complicated. Anyway, here is my > version. [...] Although it's always good to roll your own numerical methods, Mathematica 5's FindFit function will do exactly what you want: In[1]:= p1 = Plot[100 Sin[3 x + 1] + 2, {x, 0, 5}, DisplayFunction->Identity]; In[2]:= data = p1[[1,1,1,1]]; In[3]:= form = a Sin[ b x + c] + d; In[4]:= sol = FindFit[data,form,{a,b,c,d},x,Method->QuasiNewton] Out[4]= {a -> 100., b -> -3., c -> 2.14159, d -> 2.} note that Sin[3x + 1] = -Sin[-3x -1] = Sin[-3x -1+Pi]. If you want the original, you can give a starting parameter to FindFit. In[5]:= sol2 = FindFit[data,form,{a,{b,5},c,d},x,Method->QuasiNewton] Out[5]= {a -> 100., b -> 3., c -> 1., d -> 2.} In[6]:= Plot[form/.sol,{x,0,5},Epilog->Join[{Hue@0,PointSize[0.02]}, Point/@data]] -ste\/e -- /*-----------------------------*\ | stephen layland | | Technical Support Engineer | \*-----------------------------*/
- References:
- Re: NonlinearFit works not so good
- From: "Kevin J. McCann" <kmccann@umbc.edu>
- Re: NonlinearFit works not so good