## POLYFIT Fit Polynomial To Data

Section: Optimization and Curve Fitting

### Usage

The `polyfit` routine has the following syntax

      p = polyfit(x,y,n)

where `x` and `y` are vectors of the same size, and `n` is the degree of the approximating polynomial. The resulting vector `p` forms the coefficients of the optimal polynomial (in descending degree) that fit `y` with `x`.

### Function Internals

The `polyfit` routine finds the approximating polynomial

such that

is minimized. It does so by forming the Vandermonde matrix and solving the resulting set of equations using the backslash operator. Note that the Vandermonde matrix can become poorly conditioned with large `n` quite rapidly.

### Example

A classic example from Edwards and Penny, consider the problem of approximating a sinusoid with a polynomial. We start with a vector of points evenly spaced on the unit interval, along with a vector of the sine of these points.

    --> x = linspace(0,1,20);
    --> y = sin(2*pi*x);
    --> plot(x,y,'r-')
    -->
    quit

The resulting plot is shown here

Next, we fit a third degree polynomial to the sine, and use `polyval` to plot it

    --> p = polyfit(x,y,3)

    p =

       21.9170  -32.8756   11.1897   -0.1156

    --> f = polyval(p,x);
    --> plot(x,y,'r-',x,f,'ko');
    -->
    quit

The resulting plot is shown here

Increasing the order improves the fit, as

    --> p = polyfit(x,y,11)

    p =

       1.0e+02 *

    Columns 1 to 8

        0.1246   -0.6855    1.3006   -0.7109   -0.3828   -0.1412    0.8510   -0.0056

    Columns 9 to 12

       -0.4129   -0.0000    0.0628   -0.0000

    --> f = polyval(p,x);
    --> plot(x,y,'r-',x,f,'ko');
    -->
    quit

The resulting plot is shown here