Force polynomial fit through multiple points

5 Ansichten (letzte 30 Tage)
Bernoulli Lizard
Bernoulli Lizard am 29 Apr. 2013
I have a set of x, y data that I want to fit to a quadratic polynomial. Is it possible to force the fit through BOTH zero points?
  3 Kommentare
Bernoulli Lizard
Bernoulli Lizard am 29 Apr. 2013
The model is a third order polynomial: -a*x^2 + b*x + c. The fit must pass through the points (x1,0) and (x2,0). In theory the y value must be exactly zero at x1 and x2, however it is impossible to actually take data at those points.
I'm not sure where the idea of y(x) = c*(x-x1)*(x-x2) came from, but I do not think that that is what I want.
Kye Taylor
Kye Taylor am 29 Apr. 2013
Bearbeitet: Kye Taylor am 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.

Melden Sie sich an, um zu kommentieren.

Antworten (1)

Kye Taylor
Kye Taylor am 29 Apr. 2013
Bearbeitet: Kye Taylor am 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')

Kategorien

Mehr zu Polynomials finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by