  # Polynomial Regression – Least Square Fittings

This brief article will demonstrate how to work out polynomial regressions in Matlab (also known as polynomial least squares fittings). The idea is to find the polynomial function that properly fits a given set of data points.

 For this purpose, we’re going to use two useful built-in functions: polyfit (for fitting polynomial to data) and polyval (to evaluate polynomials). This is the simplest way to use these functions: p = polyfit(x, y, n) finds the coefficients of a polynomial p(x) of degree n that fits the data y best in a least-squares sense.

p is a row vector of length n + 1 containing the polynomial coefficients in descending powers, p(1)*x^n + p(2)*x^(n - 1) + ... + p(n)*x + p(n + 1).

y = polyval(p, x) returns the value of a polynomial p evaluated at x. p is a vector of length n + 1 whose elements are the coefficients of the polynomial in descending powers, y = p(1)*x^n + p(2)*x^(n - 1) + ... + p(n)*x + p(n + 1). If x is a matrix or vector, the polynomial is evaluated at all points in x.

Let’s say that we’re given these points

x = [1 2 3 4 5.5 7 10]
y = [3 7 9 15 22 21 21]

and want to explore fits of 2nd., 4th. and 5th. order. We could use the following code:

clear all, clc, close all, format compact

% define coordinates
x = [1 2 3 4 5.5 7 10];
y = [3 7 9 15 22 21 21];

% plot given data in red
plot(x, y, 'ro', 'linewidth', 2)
hold
on

% find polynomial fits of different orders
p2 = polyfit(x, y, 2)
p4 = polyfit(x, y, 4)
p5 = polyfit(x, y, 5)

% see interpolated values of fits
xc = 1 : .1 : 10;

% plot 2nd order polynomial
y2 = polyval(p2, xc);
plot(xc, y2,
'g.-')

% plot 4th order polynomial
y4 = polyval(p4, xc);
plot(xc, y4,
'linewidth', 2)

% plot 5th order polynomial
y5 = polyval(p5, xc);
plot(xc, y5,
'k.', 'linewidth', 2)
grid

legend('original data', '2nd. order fit', '4th. order', '5th. order')

The resulting fits are displayed in this figure The coefficients found by Matlab are:

p2 =    -0.3863    6.3983   -4.1596
p4 =     0.0334   -0.7377    5.0158   -8.4137    7.5779
p5 =     0.0213   -0.5022    4.1330  -14.5708   25.3233  -11.3510

which, in other words, represent the following polynomials of  2nd., 4th. and 5th. order, respectively.

y2 = -0.3863x2 + 6.3983x - 4.1596
y4 =  0.0334x4 - 0.7377x3 + 5.0158x2 - 8.4137x + 7.5779
y5 =  0.0213x5 - 0.5022x4 + 4.1330x3 - 14.5708x2 + 25.3233x - 11.3510

You can see this video on how to do it even easier with the integrated Curve Fitting Tool within the Figure window.

From 'Polynomial Regression' to home

From 'Polynomial Regression' to Matlab Tutorials 