Mathematica 9 is now available
Services & Resources / Wolfram Forums / MathGroup Archive
-----

MathGroup Archive 2012

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

Search the Archive

Re: Using Fit to interpolate data

  • To: mathgroup at smc.vnet.net
  • Subject: [mg127437] Re: Using Fit to interpolate data
  • From: Bill Rowe <readnews at sbcglobal.net>
  • Date: Wed, 25 Jul 2012 02:31:15 -0400 (EDT)
  • Delivered-to: l-mathgroup@mail-archive0.wolfram.com
  • Delivered-to: mathgroup-newout@smc.vnet.net
  • Delivered-to: mathgroup-newsend@smc.vnet.net

On 7/24/12 at 4:15 AM, carlsonkw at gmail.com (Kris Carlson) wrote:

>Can someone enlighten me about how to fit a curve to data? These
>data are of the density of axons of given diameters in the spinal
>cord. The density of smaller fibers is dramatically larger than that
>of larger fibers. There cannot be density < 0 of any diameter, so
>heuristically to prevent a fit yielding an equation that dips below
>0 I added an end point with fiber diameter = 16 that is 0. Then
>using Fit I try to increase the exponent of x until the curve
>doesn't yield negative values. The fit looks good in large scale but
>when I plot the region of greatest interest, 8 < x < 14, it no
>longer looks so good. Maybe I am simply ignorant about fitting a
>curve to somewhat irregular data? Or can it be done?

>fiberDataDensitiesFeierabend = {{16, 0}, {10.7, 0.11}, {10.4,
>0.19}, {9.77, 0.41}, {8.29, 3.05}, {7.14, 19.86}};

>fbddPlot =
>ListPlot[fiberDataDensitiesFeierabend, PlotMarkers -> {Automatic,
>Medium}]

The plot above suggests an exponential model. And doing

ListLogPlot[fiberDataDensitiesFeierabend]

Seems to confirm this in that the data points seem to line along
a line in log space.

>fbddFit = Fit[fiberDataDensitiesFeierabend, {1, x, x^-13}, x]

Better to use FindFit rather than Fit. Among other things,
FindFit allows you to specify constraints on the model
parameters. Also, using high powers of x as basis functions is
not a good idea. If you absolutely must get a polynomial fit,
choose Chebyshev polynomials or Legendre polynomials as your
basis functions rather than powers of x.

Using FindFit and assuming an exponential model I get:

In[12]:= params=FindFit[fiberDataDensitiesFeierabend, a Exp[b
x], {a, b}, x]

Out[12]= {a->2.06978*10^6,b->-1.61827}

and

Plot[a Exp[b x] /. params, {x, 7, 16.5},
  Epilog -> {PointSize[.02], Point[fiberDataDensitiesFeierabend]}]

  suggests this is a reasonable fit to the data.




  • Prev by Date: Re: Sending an interrupt to the frontend?
  • Next by Date: Re: Using Fit to interpolate data
  • Previous by thread: Re: Using Fit to interpolate data
  • Next by thread: Re: Using Fit to interpolate data