[SciPy-user] Fitting a polynomial to data

Fernando Perez Fernando.Perez at colorado.edu
Thu Jun 30 15:46:36 CDT 2005


CJ Fleck wrote:
> I have some data points that I'd like to fit a polynomial to.  I have
> a gut feeling that this can be done with scipy, but I'm not sure how. 
> Admitadly, my math skills are a bit lacking and I'm not real sure how
> to go about it.

have a look at polyfit in matplotlib, which wraps the needed functionality in 
one little, easy to use routine for you.

In [1]: polyfit?
Type:           function
Base Class:     <type 'function'>
String Form:    <function polyfit at 0x40ee180c>
Namespace:      Interactive
File:           /usr/lib/python2.3/site-packages/matplotlib/mlab.py
Definition:     polyfit(x, y, N)
Docstring:
     Do a best fit polynomial of order N of y to x.  Return value is a
     vector of polynomial coefficients [pk ... p1 p0].  Eg, for N=2

       p2*x0^2 +  p1*x0 + p0 = y1
       p2*x1^2 +  p1*x1 + p0 = y1
       p2*x2^2 +  p1*x2 + p0 = y2
       .....
       p2*xk^2 +  p1*xk + p0 = yk


     Method: if X is a the Vandermonde Matrix computed from x (see
     http://mathworld.wolfram.com/VandermondeMatrix.html), then the
     polynomial least squares solution is given by the 'p' in

       X*p = y

     where X is a len(x) x N+1 matrix, p is a N+1 length vector, and y
     is a len(x) x 1 vector

     This equation can be solved as

       p = (XT*X)^-1 * XT * y

     where XT is the transpose of X and -1 denotes the inverse.

     For more info, see
     http://mathworld.wolfram.com/LeastSquaresFittingPolynomial.html,
     but note that the k's and n's in the superscripts and subscripts
     on that page.  The linear algebra is correct, however.

     See also polyval


Cheers,

f



More information about the SciPy-user mailing list