Develop a function that creates an interpolated polynomial f
Solution
We all know that two points determine a straight line. More precisely, any two points in the plane, (x1, y1) and (x2, y2), with x1 = x2, determine a unique firstdegree polynomial in x whose graph passes through the two points. There are many different formulas for the polynomial, but they all lead to the same straight line graph. This generalizes to more than two points. Given n points in the plane, (xk, yk), k = 1, . . . , n, with distinct xk’s, there is a unique polynomial in x of degree less than n whose graph passes through the points. It is easiest to remember that n, the number of data points, is also the number of coefficients, although some of the leading coefficients might be zero, so the degree might actually be less than n 1. Again, there are many different formulas for the polynomial, but they all define the same function. This polynomial is called the interpolating polynomial because it exactly reproduces the given data: P(xk) = yk, k = 1, . . . , n. Later, we examine other polynomials, of lower degree, that only approximate the data. They are not interpolating polynomials. The most compact representation of the interpolating polynomial is the Lagrange form P(x) = k j=k x xj xk xj yk.
There are n terms in the sum and n 1 terms in each product, so this expression defines a polynomial of degree at most n1. If P(x) is evaluated at x = xk, all the products except the kth are zero. Furthermore, the kth product is equal to one, so the sum is equal to yk and the interpolation conditions are satisfied. For example, consider the following data set. x = 0:3; y = [-5 -6 -1 16]; The command disp([x; y]) displays 0 1 2 3 -5 -6 -1 16 The Lagrangian form of the polynomial interpolating these data is P(x) = (x 1)(x 2)(x 3) (6) (5) + x(x 2)(x 3) (2) (6) + x(x 1)(x 3) (2) (1) + x(x 1)(x 2) (6) (16). We can see that each term is of degree three, so the entire sum has degree at most three. Because the leading term does not vanish, the degree is actually three. Moreover, if we plug in x = 0, 1, 2, or 3, three of the terms vanish and the fourth produces the corresponding value from the data set. Polynomials are not usually represented in their Lagrangian form. More frequently, they are written as something like x 3 2x 5. The simple powers of x are called monomials, and this form of a polynomial is said to be using the power form. The coefficients of an interpolating polynomial using its power form, P(x) = c1x n1 + c2x n2 + · · · + cn1x + cn, can, in principle, be computed by solving a system of simultaneous linear equations x n1 1 x n2 1 · · · x1 1 x n1 2 x n2 2 · · · x2 1 · · · · · · · · · · · · 1 x n1 n x n2 n · · · xn 1 c1 c2 . . . cn = y1 y2 . . . yn . The matrix V of this linear system is known as a Vandermonde matrix. Its elements are vk,j = x nj k .
The columns of a Vandermonde matrix are sometimes written in the opposite order, but polynomial coefficient vectors in Matlab always have the highest power first. The Matlab function vander generates Vandermonde matrices. For our example data set, V = vander(x) generates V = 0 0 0 1 1 1 1 1 8 4 2 1 27 9 3 1 Then c = V\\y’ computes the coefficients. c = 1.0000 0.0000 -2.0000 -5.0000 In fact, the example data were generated from the polynomial x 3 2x 5. Exercise 3.6 asks you to show that Vandermonde matrices are nonsingular if the points xk are distinct. But Exercise 3.18 asks you to show that a Vandermonde matrix can be very badly conditioned. Consequently, using the power form and the Vandermonde matrix is a satisfactory technique for problems involving a few well-spaced and well-scaled data points. But as a general-purpose approach, it is dangerous. In this chapter, we describe several Matlab functions that implement various interpolation algorithms. All of them have the calling sequence v = interp(x,y,u) The first two input arguments, x and y, are vectors of the same length that define the interpolating points. The third input argument, u, is a vector of points where the function is to be evaluated. The output v is the same length as u and has elements v(k)=interp(x,y,u(k)) Our first such interpolation function, polyinterp, is based on the Lagrange form. The code uses Matlab array operations to evaluate the polynomial at all the components of u simultaneously.function v = polyinterp(x,y,u) n = length(x); v = zeros(size(u)); for k = 1:n w = ones(size(u)); for j = [1:k-1 k+1:n] w = (u-x(j))./(x(k)-x(j)).*w; end v = v + w*y(k); end To illustrate polyinterp, create a vector of densely spaced evaluation points. u = -.25:.01:3.25; Then v = polyinterp(x,y,u); plot(x,y,’o’,u,v,’-’)
The polyinterp function also works correctly with symbolic variables. For example, create symx = sym(’x’) Then evaluate and display the symbolic form of the interpolating polynomial withP = polyinterp(x,y,symx) pretty(P) which produces P = (x*(x - 1)*(x - 3))/2 + 5*(x/2 - 1)*(x/3 - 1)*(x - 1) + (16*x*(x/2 - 1/2)*(x - 2))/3 - 6*x*(x/2 - 3/2)*(x - 2) / x \\ 16 x | - - 1/2 | (x - 2) x (x - 1) (x - 3) / x \\ / x \\ \\ 2 / ----------------- + 5 | - - 1 | | - - 1 | (x - 1) + ------------------------ 2 \\ 2 / \\ 3 / 3 / x \\ - 6 x | - - 3/2 | (x - 2) \\ 2 / This expression is a rearrangement of the Lagrange form of the interpolating polynomial. Simplifying the Lagrange form with P = simplify(P) changes P to the power form P = x^3 - 2*x - 5 Here is another example, with a data set that is used by the other methods in this chapter. x = 1:6; y = [16 18 21 17 15 12]; disp([x; y]) u = .75:.05:6.25; v = polyinterp(x,y,u); plot(x,y,’o’,u,v,’r-’); produces 1 2 3 4 5 6 16 18 21 17 15 12 and Figure 3.2. Already in this example, with only six nicely spaced points, we can begin to see the primary difficulty with full-degree polynomial interpolation. In between the data points, especially in the first and last subintervals, the function shows excessive variation. It overshoots the changes in the data values. As a result, fulldegree polynomial interpolation is hardly ever used for data and curve fitting. Its primary application is in the derivation of other numerical methods.


