homework5.mw

> with(plots):
 

> Digits:=16:
 

Use the twenty-one points of back-of-the-duck data from Section 3.4 (Table 3.17 in the eighth edition) to actually compute the degree-20 polynomial which interpolates it. (Use one of the prebuilt commands in the mathematical software.) Then plot that polynomial with enough detail to reproduce the wildly-oscillating plot in the book (Figure 3.12). Then swear to me that you will never use a high-order interpolating polynomial for experimental data. Swear it! 

> xvals:=[0.9,1.3,1.9,2.1,2.6,3.0,3.9,4.4,4.7,5.0,6.0,7.0,8.0,9.2,10.5,11.3,11.6,12.0,12.6,13.0,13.3]:
yvals:=[1.3,1.5,1.85,2.1,2.6,2.7,2.4,2.15,2.05,2.1,2.25,2.3,2.25,1.95,1.4,0.9,0.7,0.6,0.5,0.4,0.25]:
f:=x->interp(xvals,yvals,x):
 

> f(x);
 

52462.58032764909*x-128683.4057764286*x^2+189994.9932340694*x^3-189850.9728575972*x^4+136777.9002235839*x^5-73866.56567676085*x^6+30677.63497333309*x^7-9968.978857083541*x^8+2564.201308129684*x^9-525....
52462.58032764909*x-128683.4057764286*x^2+189994.9932340694*x^3-189850.9728575972*x^4+136777.9002235839*x^5-73866.56567676085*x^6+30677.63497333309*x^7-9968.978857083541*x^8+2564.201308129684*x^9-525....
52462.58032764909*x-128683.4057764286*x^2+189994.9932340694*x^3-189850.9728575972*x^4+136777.9002235839*x^5-73866.56567676085*x^6+30677.63497333309*x^7-9968.978857083541*x^8+2564.201308129684*x^9-525....
52462.58032764909*x-128683.4057764286*x^2+189994.9932340694*x^3-189850.9728575972*x^4+136777.9002235839*x^5-73866.56567676085*x^6+30677.63497333309*x^7-9968.978857083541*x^8+2564.201308129684*x^9-525....
52462.58032764909*x-128683.4057764286*x^2+189994.9932340694*x^3-189850.9728575972*x^4+136777.9002235839*x^5-73866.56567676085*x^6+30677.63497333309*x^7-9968.978857083541*x^8+2564.201308129684*x^9-525....
52462.58032764909*x-128683.4057764286*x^2+189994.9932340694*x^3-189850.9728575972*x^4+136777.9002235839*x^5-73866.56567676085*x^6+30677.63497333309*x^7-9968.978857083541*x^8+2564.201308129684*x^9-525....
52462.58032764909*x-128683.4057764286*x^2+189994.9932340694*x^3-189850.9728575972*x^4+136777.9002235839*x^5-73866.56567676085*x^6+30677.63497333309*x^7-9968.978857083541*x^8+2564.201308129684*x^9-525....
52462.58032764909*x-128683.4057764286*x^2+189994.9932340694*x^3-189850.9728575972*x^4+136777.9002235839*x^5-73866.56567676085*x^6+30677.63497333309*x^7-9968.978857083541*x^8+2564.201308129684*x^9-525....
52462.58032764909*x-128683.4057764286*x^2+189994.9932340694*x^3-189850.9728575972*x^4+136777.9002235839*x^5-73866.56567676085*x^6+30677.63497333309*x^7-9968.978857083541*x^8+2564.201308129684*x^9-525....
52462.58032764909*x-128683.4057764286*x^2+189994.9932340694*x^3-189850.9728575972*x^4+136777.9002235839*x^5-73866.56567676085*x^6+30677.63497333309*x^7-9968.978857083541*x^8+2564.201308129684*x^9-525....
52462.58032764909*x-128683.4057764286*x^2+189994.9932340694*x^3-189850.9728575972*x^4+136777.9002235839*x^5-73866.56567676085*x^6+30677.63497333309*x^7-9968.978857083541*x^8+2564.201308129684*x^9-525....
 

> plot(f(x),x=0..14, view=[0..14,-2..6], numpoints=100000);
 

Plot 

Wow, that's a pretty terrible duck portrait. I swear, on the grave of the master, Joseph Louis Lagrange, that I will never use a high-order interpolating polynomial on experimental data. 

>
 

Section 3.1, problem 6. Use appropriate Lagrange interpolating polynomials of degrees one, two, and three to approximate each of the following. 

(a) f(0.43) if f(0)=1, f(0.25) = 1.64872, f(0.5)=2.71828, f(0.75)=4.48169. 

> interpol_a_1:=x->interp([0.25,0.5],[1.64872,2.71828],x):
interpol_a_1(x);
value_a[1]:=interpol_a_1(0.43);
interpol_a_2:=x->interp([0.25,0.5,0.75],[1.64872,2.71828,4.48169],x):
interpol_a_2(x);
value_a[2]:=interpol_a_2(0.43);
interpol_a_3:=x->interp([0,0.25,0.5,0.75],[1,1.64872,2.71828,4.48169],x):
interpol_a_3(x);
value_a[3]:=interpol_a_3(0.43);
 

4.278240000000000*x+.579160000000000 

2.418803200000000 

5.550800000000000*x^2+.115140000000000*x+1.273010000000000 

2.348863120000000 

2.912106666666668*x^3+1.182639999999999*x^2+2.117213333333334*x+1 

2.360604734080000 

(b) f(0) if f(-0.5)=1.93750, f(-0.25)=1.33203, f(0.25)=0.800781, f(0.5)=0.687500. 

> interpol_b_1:=x->interp([-0.25,0.25],[1.33203,0.800781],x):
interpol_b_1(x);
value_b[1]:=interpol_b_1(0);
interpol_b_2:=x->interp([-0.25,0.25,0.5],[1.33203,0.800781,0.687500],x):
interpol_b_2(x);
value_b[2]:=interpol_b_2(0);
interpol_b_3:=x->interp([-0.5,-0.25,0.25,0.5],[1.93750,1.33203,0.800781,0.687500],x):
interpol_b_3(x);
value_b[3]:=interpol_b_3(0);
 

-1.062498000000000*x+1.066405500000000 

1.066405500000000 

.8124986666666666*x^2-1.062498000000000*x+1.015624333333333 

1.015624333333333 

-1.000010666666667*x^3+1.312504000000000*x^2+.9843740000000000-.9999973333333330*x
-1.000010666666667*x^3+1.312504000000000*x^2+.9843740000000000-.9999973333333330*x
 

.9843740000000000 

f(0.18) if f(0.1)=-0.29004986, f(0.2)=-0.56079734, f(0.3)=-0.81401972, f(0.4)=-1.0526302. 

> interpol_c_1:=x->interp([0.1,0.2],[-0.29004986,-0.56079734],x):
interpol_c_1(x);
value_c[1]:=interpol_c_1(0.18);
interpol_c_2:=x->interp([0.1,0.2,0.3],[-0.29004986,-0.56079734,-0.81401972],x):
interpol_c_2(x);
value_c[2]:=interpol_c_2(0.18);
interpol_c_3:=x->interp([0.1,0.2,0.3,0.4],[-0.29004986,-0.56079734,-0.81401972,-1.0526302],x):
interpol_c_3(x);
value_c[3]:=interpol_c_3(0.18);
 

-2.7074748*x-0.1930238e-1 

-.506647844 

.8762550000000000*x^2-2.970351300000000*x-0.17772800000000e-2 

-.5080498520000000 

-.4855333333333334*x^3+1.167575000000000*x^2+0.11359200000000e-2-3.023759966666667*x
-.4855333333333334*x^3+1.167575000000000*x^2+0.11359200000000e-2-3.023759966666667*x
 

-.5081430744000000 

(d) f(0.25) if f(-1)=0.86199480, f(-0.5)=0.95802009, f(0)=1.0986123, f(0.5)=1.2943767. 

> interpol_d_1:=x->interp([0,0.5],[1.0986123,1.2943767],x):
interpol_d_1(x);
value_d[1]:=interpol_d_1(0.25);
interpol_d_2:=x->interp([-0.5,0,0.5],[0.95802009,1.0986123,1.2943767],x):
interpol_d_2(x);
value_d[2]:=interpol_d_2(0.25);
interpol_d_3:=x->interp([-1,-0.5,0,0.5],[0.86199480,0.95802009,1.0986123,1.2943767],x):
interpol_d_3(x);
value_d[3]:=interpol_d_3(0.25);
 

.3915288000000000*x+1.0986123 

1.196494500000000 

.1103443800000000*x^2+.3363566100000000*x+1.098612300000000 

1.189597976250000 

0.1414036000000000e-1*x^3+.1103443800000000*x^2+1.098612300000000+.3328215200000000*x
0.1414036000000000e-1*x^3+.1103443800000000*x^2+1.098612300000000+.3328215200000000*x
 

1.188935146875000 

Section 3.1, problem 10. The data for Exercise 6 were generated using the following functions. Use the error formula to find a bound for the error, and compute the bound to the actual error for the cases n=1 and n=2. 

(a) f(x) = exp(2x). 

> f_a:=x->exp(2*x);
f_a(0.43);
 

proc (x) options operator, arrow; exp(2*x) end proc 

2.363160693705795 

> maxderiv_a[1]:=maximize(abs(D(D(f_a))(x)),x=0.25..0.5);
Max_error_a[1]:=abs(maxderiv_a[1]/2*(0.43-0.25)*(0.43-0.5));
Actual_error_a[1]:=abs(f_a(0.43)-value_a[1]);
maxderiv_a[2]:=maximize(abs(D(D(D(f_a)))(x)),x=0.25..0.75);
Max_error_a[2]:=abs(maxderiv_a[2]/6*(0.43-0.25)*(0.43-0.5)*(0.43-0.75));
Actual_error_a[2]:=abs(f_a(0.43)-value_a[2]);
 

10.87312731383618 

0.6850070207716793e-1 

0.55642506294205e-1 

35.85351256270452 

0.2409356044213744e-1 

0.14297573705795e-1 

(b) f(x)=x^4-x^3+x^2-x+1. 

> f_b:=x->x^4-x^3+x^2-x+1;
f_b(0);
 

proc (x) options operator, arrow; x^4-x^3+x^2-x+1 end proc 

1 

> maxderiv_b[1]:=maximize(abs(D(D(f_b))(x)),x=-0.25..0.25);
Max_error_b[1]:=abs(maxderiv_b[1]/2*(0+0.25)*(0-0.25));
Actual_error_b[1]:=abs(f_b(0)-value_b[1]);
maxderiv_b[2]:=maximize(abs(D(D(D(f_b)))(x)),x=-0.25..0.5);
Max_error_b[2]:=abs(maxderiv_b[2]/6*(0+0.25)*(0-0.25)*(0-0.5));
Actual_error_b[2]:=abs(f_b(0)-value_b[2]);
 

4.2500 

.1328125000000000 

0.66405500000000e-1 

12.00 

0.6250000000000002e-1 

0.15624333333333e-1 

(c) f(x)=x^2 cos(x)-3x. 

> f_c:=x->x^2*cos(x)-3*x;
f_c(0.18);
 

proc (x) options operator, arrow; x^2*cos(x)-3*x end proc 

-.5081234643536649 

> maxderiv_c[1]:=maximize(abs(D(D(f_c))(x)),x=0.1..0.2);
Max_error_c[1]:=abs(maxderiv_c[1]/2*(0.18-0.1)*(0.18-0.2));
Actual_error_c[1]:=abs(f_c(0.18)-value_c[1]);
maxderiv_c[2]:=maximize(abs(D(D(D(f_c)))(x)),x=0.1..0.3);
Max_error_c[2]:=abs(maxderiv_c[2]/6*(0.18-0.1)*(0.18-0.2)*(0.18-0.3));
Actual_error_c[2]:=abs(f_c(0.18)-value_c[2]);
 

1.940124922244541 

0.1552099937795633e-2 

0.14756203536649e-2 

3.466130101794608 

0.1109161632574274e-3 

0.736123536649e-4 

(d) f(x) = ln(e^x+2). 

> f_d:=x->ln(exp(x)+2);
f_d(0.25);
 

proc (x) options operator, arrow; ln(exp(x)+2) end proc 

1.189069931111919 

> maxderiv_d[1]:=maximize(abs(D(D(f_d))(x)),x=0..0.5);
Max_error_d[1]:=abs(maxderiv_d[1]/2*(0.25-0)*(0.25-0.5));
Actual_error_d[1]:=abs(f_d(0.25)-value_d[1]);
maxderiv_d[2]:=maximize(abs(D(D(D(f_d)))(x)),x=-0.5..0.5);
Max_error_d[2]:=abs(maxderiv_d[2]/6*(0.25+0.5)*(0.25-0)*(0.25-0.5));
Actual_error_d[2]:=abs(f_d(0.25)-value_d[2]);
 

.2476828063059479 

0.7740087697060872e-2 

0.7424568888081e-2 

0.9545345642929568e-1 

0.7457301283538725e-3 

0.528045138081e-3