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.