240 likes | 368 Views
Scientific Computing. Interpolation – Divided Differences Efficiency and Error Analysis. How is Interpolation used?. Here is a table of values for the temperature at a given depth for a lake. We want a good estimate of the temperature at a depth of 7.5 meters. Newton’s Nested Formula.
E N D
Scientific Computing Interpolation – Divided Differences Efficiency and Error Analysis
How is Interpolation used? Here is a table of values for the temperature at a given depth for a lake. We want a good estimate of the temperature at a depth of 7.5 meters.
Newton’s Nested Formula Recall: Newton’s method is iterative with Pk+1 (x) = Pk (x) + ck (x – x0)(x – x1) … (x – xk) Now, Pk (x) satisfies a similar formula: Pk (x) = Pk-1 (x) + ck-1 (x – x0)(x – x1) … (x – xk-1) So, Pk+1 (x) = Pk-1 (x) + [ck-1 (x – x0)…(x – xk-1)] + + [ck (x – x0)…(x – xk)] Thus, Pn (x) = c0 + [c1 (x – x0)] + … + [cn (x – x0 )…(x – xn )]
Newton Nested Formula Pn (x) = c0 + [c1 (x – x0)] + … + [cn (x – x0 )…(x – xn )] We can write this in a compact form as Here we define the product for k =0 to be 1, so the first term is c0 , as it should be. We can rewrite this formula as (verify this!!) Pn (x) = c0 + (x – x0)[c1 + (x – x1)[c2 + (x – x2)[…]]]
Newton Nested Formula Pn (x) = c0 + (x – x0)[c1 + (x – x1)[c2 + (x – x2)[…]]] This allows a better way of calculating Pn (t) for a value of t (or x): Then, vn = Pn (x) This is called Newton’s Nested formula for Pn
Efficiency Newton’s Nested formula Requires 2n additions, n multiplications O(n) Lagrange Interpolation Requires at least n2 additions O(n2)
Newton Divided Differences vn = Pn (x) This is efficient, but is there a fast way to calculate theck ‘s?
Newton Divided Differences Pn (x) = c0 + c1 (x – x0) + … + cn (x – x0 )…(x – xn )] 1) Substituting x0 for x and y0 for y=Pn(x), we get c0 = y0=f[x0] 2) Now, substituting x1 for x and y1 for y, we get 3) Substitute once more (x2 ,y2) to get
Newton Divided Differences 3) (cont’d) Simplifying, we get So, Pn (x) = f[x] + f[x0, x1](x – x0) + f[x0, x1, x2](x – x0)(x -x1) + … + cn (x – x0 )…(x – xn )]
Newton Divided Differences Definition (Divided Differences). For a given collection of data { (xi ,f(xi) ) } a kth order divided difference is a function of k + 1 (not necessarily distinct) data values written as f[xi , xi+1 , … , xi+k]. 0th Order: f[xi ] = f(xi) = yi kth Order:
Newton Divided Differences Theorem For Newton’s Interpolation formula Pn (x) = c0 + [c1 (x – x0)] + … + [cn (x – x0 )…(x – xn )] the coefficients ck can be calculated as ck = f[x0 , x1 , … , xk]
Newton Divided Differences Algorithm for Calculating Divided Differences: Calculate the differences in “pyramid” fashion, until you reach the last one.
Newton Divided Differences Example: Data (1,3), (1/2, -10), (3,2)
Newton Divided Differences Example: Data (1,3), (1/2, -10), (3,2)
Newton Divided Differences Example: Data (1,3), (1/2, -10), (3,2) Top row of the pyramid contains coefficients, c0 = 3, c1 = 26 , c2 = -53/5 Recall: Earlier work gave p(x) = 3+ 26 (x-1) – (53/5) (x-1)(x-1/2)
Matlab - Newton Divided Differences Notes: We want to store the values in the “pyramid”. These can be stored in a matrix. We let F(i,k) = kth divided difference Differences are indexed from 0 to n, so F will have indexes from 1 to n+1. Vectors: x[], y[] for initial data, y = f(x).
Matlab - Newton Divided Differences Notes: F(i,k) = kth divided difference Get F(i,k+1) = (F(i+1,k)-F(i,k))/(x(i+k)-x(i))
Matlab - Newton Divided Differences function F = div_diff(x, y) % div_diff function computes all divided differences for % the data stored in x and y = f(x) n = length(x); m = length(y); if m~=n; error('x and y must be same size'); else F = zeros(n, n); for i = 1:n % define 0th divide difference F(i,1) = y(i); end for k = 1:n-1 % Get kth divided difference for i = 1:n-k F(i,k+1) = (F(i+1,k)-F(i,k))/(x(i+k)-x(i)); end end
Matlab - Newton Divided Differences Example: x=[1 0.5 3]‘; y=[3 -10 2]'; div_diff(x,y) ans = 3.0000 26.0000 -10.6000 -10.0000 4.8000 0 2.0000 0 0 Top row (F(1,*)) holds coefficients ck .
Matlab - Newton Nested Formula Need loop running “Backwards” For evaluation, we replace x by a value u.
Matlab - Newton Nested Formula function v = newtonInterp(x,y,u) % v = newtonInterp(x,y,u) computes the Newton method % interpolation value p(u) for the given data x and y n = length(x); m = length(y); if m~=n; error('x and y must be same size'); else F = div_diff(x,y); % Compute Newton polynomial using nested format v = F(1,n); % v0 = cn for i = n-1:-1:1 v = F(1,i) + (u-x(i))*v; % nested formula end end
Matlab - Newton Nested Formula Test: >> newtonInterp(x,y,1) ans = 3 >> newtonInterp(x,y,0.5) ans = -10 >> newtonInterp(x,y,3) ans = 2
Class Exercise Here is a table of values for the temperature at a given depth for a lake. Find a good estimate of the temperature at a depth of 7.5 meters. Use a cubic interpolating polynomial to help solve this problem.
Error Analysis If we want to interpolate a given f(x) at n+1 nodes, how should we pick nodes? How accurate can we make a polynomial interpolant over an interval?