Services & Resources / Wolfram Forums
-----
 /
MathGroup Archive
1998
*January
*February
*March
*April
*May
*June
*July
*August
*September
*October
*November
*December
*Archive Index
*Ask about this page
*Print this page
*Give us feedback
*Sign up for the Wolfram Insider

MathGroup Archive 1998

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

Search the Archive

Re: NonlinearFit



Phil Howe wrote:
> 
> I'm having a problem working with NonLinearFit, and would like some
> advice. To demonstrate the problem, I'll use a very simple expression,
> y==a*x^c +b, where I have assigned a=3, b=7, and c=2.
> 
> Clear[data]
> This generates a simple data set:
> data=Table[{x, 3*x^2+7 +5*Random[]},{x,0,4,.2}];
> 
> Now I try to use NonLinearFit.  If I specify the value of the exponent,
> "c", the  routine seems to work. If I ask it to find a value of c, it
> chokes, even if I tell it the right answer:
> 
> Remove[a,b,c,x];
> 
> NonlinearFit[data,a*x^c+b,x, {{c,2},{b,7},{a,3}}];
> 
> NonlinearFit::"badderiv": "The matrix of model derivatives (dimensions
> \!\({3, 21}\)) includes DirectedInfinity in at least one element.  Try
> fitting without data points having indices in the list \!\({1}\)."
> 

1)  If the nonlinearfit routine ever tries any negative values for x and
c is any real number, then the function becomes wildly oscillatory
between positive and negative numbers depending on how you want to
define a negative number to a fractional power.  Trying to evaluate
derivatives in this region gives similarly difficult results.  Trying
to evaluate derivatives at x=0 is similarly problematic because the
right anad left hand derivatives are different.  That is what gives the
directed infinity error message.

2)  Using a random number from 0 to 5 to simulate experimental noise may
not be a good idea.  Your function ranges from 7 to 55 over the range
while the noise stays fixed in size at 5 Random[] which makes a signal
to noise ratio that ranges from 1.4 near zero to 8 at the end of the
range.  A better approximation to noise is (1+noise
Random[x])(3*x^2+7).


To fix the problem, just generate data that doesn't have zero as one of
the data points due to the problem of evaluating derivatives there. 
For example:

data=Table[{x,(1+0.15 Random[])( 3*x^2+7)} ,{x,.1,4.1,.2}];
NonlinearFit[data,a*x^c+b,x, {{c,2},{b,7},{a,3}}]

returns:

6.756291662079482 + 3.939994195809126*x^1.858652816625926 -- 
Remove the _nospam_ in the return address to respond.



  • Prev by Date: Formatting posts
  • Next by Date: 3D Graphics Spherical Coordinates
  • Prev by thread: Re: Re: Formatting posts
  • Next by thread: Re: NonLinearFit