In: Advanced Math
In Matlab (diary on), do the following:
1. Generate N+1=11 equi-spaced nodes Xi in the interval [−5,5]:
X = [-5:1:5]; (to see values, omit the ;)
or X = linspace(-5,5,11);
and evaluate f(x) at these nodes:
Y = 1./(1+X.^2);
The N+1 points (Xi, Yi) are the data points to be interpolated by various methods.
Plot them to see where they are:
plot(X,Y,'o')
title('N+1 = 11 equi-spaced points of Runge function')
pause
Also generate lots of points xi at which to evaluate f(x) and the interpolants for plotting:
x = [-5:0.1:5]; (this is a lower case x, not X)
Evaluate f(x) at these xi's and plot y=f(x) and the data points:
plot(x,y,'-', X,Y,'o')
title('Runge f(x) and data pts')
pause
Now, we use the data points (Xi, Yi) to construct various interpolants.
A good interpolant should "reproduce" the function f(x) as close as possible.
Let's try a few.
2. Nth degree interpolating polynomial:
Use Matlab's polyinterp to construct (the coefficients of) the Nth degree interpolating polynomial (here N=10):
pN = polyfit( X,Y, N);
Now this can be evaluated anywhere in the interval [-5,5] with polyval, e.g. at the xi's:
v = polyval( pN, x);
Find the Inf-norm error ∥y-v∥∞:
err = norm(y-v, inf)
and plot both f(x) and pN(x) on the same plot:
plot(x,y,'-b', x,v,'*-r')
title('f(x) and pN(x) at plotting pts')
pause
Is this a good interpolant ? Why ?
3. Interpolation at Chebychev nodes:
Generate N+1=11 Chebychev points (Xchebi, Ychebi) in [a,b]:
fprintf('------ chebychev nodes ------\n')
K = N+1;
a=−5; b=5;
for i=1:K
Xcheb(i)=(a+b)/2 + (b−a)/2 *cos( (i−0.5)*pi/K );
end
Ycheb = 1./(1+Xcheb.^2);
Follow the steps in 2. to produce the Nth degree interpolating polynomial pNcheb
based on the Chebychev nodes, its values vcheb at the xi's, the error ∥y − vcheb∥∞,
and plot both f(x) and pNcheb(x) on the same plot.
Compare the error and plot with those from 2.
Which one is better ? why ?
4. Piecewise linear interpolation:
Use Matlab's interp1 to construct the linear interpolant:
lin = interp1(X,Y, x, 'linear');
Repeat the steps of 2.
Compare errors and plots.
5. Piecewise cubic interpolation:
Use Matlab's interp1 to construct the cubic interpolant:
cub = interp1(X,Y, x, 'cubic');
Repeat the steps of 2.
Compare errors and plots.
6. Cubic spline interpolation:
Use Matlab's interp1 to construct the spline interpolant:
spl = interp1(X,Y, x, 'spline');
Repeat the steps of 2.
Compare errors and plots.
7. To see that the error gets worse for bigger N for equi-spaced nodes but not for Chebychev nodes
(for this f(x) at least), repeat 2. and 3. with N = 20.