| > | 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); |
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
| > | plot(f(x),x=0..14, view=[0..14,-2..6], numpoints=100000); |
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); |
(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); |
![]()
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); |
![]()
(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); |
![]()
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); |
| > | 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]); |
(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); |
| > | 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]); |
(c) f(x)=x^2 cos(x)-3x.
| > | f_c:=x->x^2*cos(x)-3*x;
f_c(0.18); |
| > | 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]); |
(d) f(x) = ln(e^x+2).
| > | f_d:=x->ln(exp(x)+2);
f_d(0.25); |
| > | 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]); |