elbarto
elbarto

Reputation: 211

Polyfit and polyval to perform interpolation

I have

x = linspace(-5,5,256) y = 1./(1+x.^2) plot(x,y,'...') %plot of (x,y)

I want to estimate this with a polynomial of order 10, such that the polynomial intersects the graph at 11 points.

So, I did this:

x2 = linspace(-5,5,11) y2 = 1./(1+x2.^2) p = polyfit(x2,y2,10) %finds coefficients of polynomial of degree 10 that fits x2,y2 y3 = polyval(p,x2) plot(x,y,x2,y3,'...')

I thought the polyfit would give me the coefficients for a polynomial up to order 10, which intersects the points (x2,y2) (i.e 11 points) then y3 is essentially just the y values of where the 10th order polynomial lands, so plotting them altogether would give me the 10th order polynomial, intersecting my original graph at 11 unique points?

What have I done wrong?

My result: enter image description here

Upvotes: 0

Views: 2428

Answers (2)

user9767135
user9767135

Reputation: 1

Consider the points (1,3), (2,6.2) and (3,13.5). Use Matlab's builtin function polyfit to obtain the best parameters for fitting the model P = Poekt to this data

Upvotes: 0

knedlsepp
knedlsepp

Reputation: 6084

Your computations are correct, but you are not plotting the function the right way. The blue line in your generated plot is piecewise linear. That's because you are only evaluating your polynomial p at the interpolation points x2. The plot command then draws line segments between those points and you are presented with your unexpected plot. To get the expected result you simply have to evaluate your polynomial more densely like so:

x3 = linspace(-5,-5,500);
y3 = polyval(p,x3);
plot(x3,y3);

Upvotes: 2

Related Questions