Force polynomial fit through multiple points
    18 views (last 30 days)
  
       Show older comments
    
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 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
				Find more on Polynomials in Help Center and File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!