Re: 'NonlinearFit` confusion
- To: mathgroup at smc.vnet.net
- Subject: [mg49895] Re: [mg49844] 'NonlinearFit` confusion
- From: Yasvir Tesiram <yat at omrf.ouhsc.edu>
- Date: Thu, 5 Aug 2004 09:21:59 -0400 (EDT)
- References: <200408041446.KAA20105@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
Hi, Why not take less points, rather than more?? In[480]:= Clear[datay,datax,data1] datay = Table [6 + 2Sin[3 + x], {x, -10Pi, 10Pi, 0.05}]; datax = Table [x, {x, -10Pi, 10Pi, 0.05}]; data1 = Table[{datax[[i]], datay[[i]]}, {i, 1, Length[datay]}]; Length[data1] First[data1] Out[484]= 1257 Out[485]= {-31.4159,6.28224} In[511]:= Clear[a,b,c,d,e] sinFit1=NonlinearFit[Take[data1,40], c + a *Sin[d + e *x], x, {a, c, d,e}] Out[512]= 6.\[InvisibleSpace]+2. Sin[3.\[InvisibleSpace]+1. x] In[513]:= Clear[y,datay,datax,a,b,c,d,e] datay = Table [6 + 2Sin[3 + 5 x], {x, -10Pi, 10Pi, 0.05}]; datax = Table [x, {x, -10Pi, 10Pi, 0.05}]; data2 = Table[{datax[[i]], datay[[i]]}, {i, 1, Length[datay]}]; Length[data2] First[data2] Out[517]= 1257 Out[518]= {-31.4159,6.28224} In[519]:= y=a*Sin[d+e x]+c; sinFit2=NonlinearFit[Take[data2,40],y, x, {a,c, d,e}] Out[520]= 6.\[InvisibleSpace]+2. Sin[122.381\[InvisibleSpace]+5. x] DisplayTogether[ Plot[sinFit1, {x, -10Pi, -8 Pi}, PlotStyle -> Blue], Plot[sinFit2, {x, -10Pi, -8 Pi}, PlotStyle -> Red], ListPlot[Take[data1, 40], PlotStyle -> {Blue, PointSize[0.011]}], ListPlot[Take[data2, 30], PlotStyle -> {Red, PointSize[0.011]}], Prolog -> { { Blue, Text["sinFit1", {-27.5, 7}, {-1, 0}, TextStyle -> {FontFamily -> "Times", FontWeight -> "Bold", FontSize -> 18 } ] }, { Red, Text["sinFit2", {-26.9, 6}, {-1, 0}, TextStyle -> {FontFamily -> "Times", FontWeight -> "Bold", FontSize -> 18 } ] } }, ImageSize -> 800, Frame -> False, AxesOrigin -> {-31.5, 4.0} ] Cheers Yas On Aug 4, 2004, at 9:46 AM, Klingot wrote: > I'm trying to fit a sinusoidal function to my data using > 'NonlinearFit' but it's exhibiting rather odd behaviour. Please see my > examples below: > > EXAMPLE (1). > > **** As a test, I created a list of data from a function of the form y > = 6 + 2Sin[3 + x] with: > > datay = Table [6 + 2Sin[3 + x], {x, -10Pi, 10Pi, 0.05}]; > datax = Table [x, {x, -10Pi, 10Pi, 0.05}]; > data = Table[{datax[[i]], datay[[i]]}, {i, 1, Length[datay]}]; > > **** Then tested to see whether NonlinearFit would correctly deduce > the equations parameters with: > > NonlinearFit[data, c + a Sin[d + e x], x, {a, c, d,e}] > > **** As expected, it gave me '6.+ 2. Sin[3. + 1. x]' ... exactly as > one would expect :) > > > EXAMPLE (2). > > **** Second test, I modified the equation by multiplying x by 5, ie. > y = 6 + 2Sin[3 + 5x]: > > datay = Table [6 + 2Sin[3 + 5 x], {x, -10Pi, 10Pi, 0.05}]; > datax = Table [x, {x, -10Pi, 10Pi, 0.05}]; > data = Table[{datax[[i]], datay[[i]]}, {i, 1, Length[datay]}]; > > ***** and applied the NonlinearFit as before: > > NonlinearFit[data, c + a Sin[d + e x], x, {a, c, d,e}] > > ***** but this time I get a wildly innacurate result: 6.000165 + > 0.025086 Sin[0.0080308 - 0.247967 x] > > Specifically, the parameters 'a', 'd' and 'e' are all completely in > error by orders of magnitude. > > I tried extending the range of the data to include more cycles of the > sinusoid, thereby making it more continuous/monotonic but that made no > difference. > > Am I missing something fundamental here? > > Any assistance would be greatly appreciated. > > PS: I'm using Mathematica 5.0 on a MAC. > Dr. Yasvir A. Tesiram Associate Research Scientist Oklahoma Medical Research Foundation Free Radical Biology and Ageing Research Program 825 NE 13th Street, OKC, OK, 73104 P: (405) 271 7126 F: (405) 271 1795 E: yat at omrf.ouhsc.edu
- Follow-Ups:
- Re: Re: 'NonlinearFit` confusion
- From: "Janos D. Pinter" <jdpinter@hfx.eastlink.ca>
- Re: Re: 'NonlinearFit` confusion
- References:
- 'NonlinearFit` confusion
- From: klingot@yahoo.com (Klingot)
- 'NonlinearFit` confusion