# Force polynomial fit through multiple points

5 views (last 30 days)

Show older comments

##### 3 Comments

Kye Taylor
on 29 Apr 2013

Edited: Kye Taylor
on 29 Apr 2013

Remember that a third order polynomial has the form

g(x) = a*x^3 + b*x^2 + c*x + d

A second order polynomial has the form

f(x) = a*x^2 + b*x + c

This same second order polynomial can be written

f(x) = a*(x-x1)*(x-x2)

where x1 and x2 are the roots of the polynomial and a is the coefficient on x^2. So the model y(x) = constant*(x-x1)*(x-x2) is exactly what you want.

### Answers (1)

Kye Taylor
on 29 Apr 2013

Edited: Kye Taylor
on 30 Apr 2013

I assume your data is given by two row vectors xData and yData, given for example by

xData = linspace(-2,2);

yData = 2.3*(xData-1).*(xData+1) + 0.2*rand(size(xData));

Then, since you know the roots, try this

% the roots you know

x1 = 1;

x2 = -1;

% the coefficient that makes the model

% y(x) = a*(x-x1)*x-x2) fit the data with

% smallest squared-error In other words

% a minimizes l2-error in a*designMatrix - yData'

designMatrix = ((xData-x1).*(xData-x2))';

a = designMatrix\yData'

plot(xData, yData, 'ko', xData, a*designMatrix, 'r-')

legend('Data','Model')

##### 0 Comments

### See Also

### Categories

### Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!