% October 2017 % % Written by Per-Gunnar Martinsson, University of Oxford % % The methods follow Lloyd N. Trefethen's % % "Approximation Theory and Approximation Practice" % % textbook published by SIAM in 2013. Many code snippets are taken from % this text. They have been modified freey, however, and any errors are % due to PGM. function lecture04 DRIVER_n0 DRIVER_n1 DRIVER_n3 DRIVER_analytic DRIVER_entire DRIVER_Cinfty return %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function DRIVER_n0 x = chebfun('x'); f = sign(x); nn = (2.^(0:8))-1; err = 0*nn; for j = 1:length(nn) n = nn(j); fn = chebfun(f,n+1); err(j) = norm(f-fn,inf); end hold off figure(1) nmax = max(nn); fn = chebfun(f,2*nmax); kk = 0:nmax; aa = chebcoeffs(fn); loglog(kk,1./(kk.^1),'r',... kk,abs(aa(1:(nmax+1))),'b.',.... 'MarkerSize',35,... 'LineWidth',3) title('Magnitude of Chebyshev coefficient: f(x) = sign(x)') xlabel('k') ylabel('|a_k|') legend('Exact k^{-1}','|a_{k}|') hold off figure(2) loglog(nn,err,'b.',.... 'MarkerSize',35,... 'LineWidth',3) title('Errors of Chebyshev interpolants in sup norm: f(x) = sign(x)') xlabel('n') ylabel('||f - f_n||') keyboard return %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function DRIVER_n1 x = chebfun('x'); f = abs(x); nn = (2.^(0:8))-1; err = 0*nn; for j = 1:length(nn) n = nn(j); fn = chebfun(f,n+1); err(j) = norm(f-fn,inf); end hold off figure(1) nmax = max(nn); fn = chebfun(f,2*nmax); kk = 0:nmax; aa = chebcoeffs(fn); loglog(kk,1./(kk.^2),'r',... kk,abs(aa(1:(nmax+1))),'b.',.... 'MarkerSize',35,... 'LineWidth',3) title('Magnitude of Chebyshev coefficient: f(x) = abs(x)') xlabel('k') ylabel('|a_k|') legend('Exact k^{-2}','|a_{k}|') hold off figure(2) loglog(nn,1./nn,'r',... nn,err,'b.',.... 'MarkerSize',35,... 'LineWidth',3) title('Errors of Chebyshev interpolants in sup norm: f(x) = abs(x)') xlabel('n') ylabel('||f - f_n||') legend('Exact n^{-1}','||f - f_{n}||') keyboard return %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function DRIVER_n3 x = chebfun('x'); f = abs(x).^3; nn = (2.^(0:8))-1; err = 0*nn; for j = 1:length(nn) n = nn(j); fn = chebfun(f,n+1); err(j) = norm(f-fn,inf); end hold off figure(1) nmax = max(nn); fn = chebfun(f,2*nmax); kk = 0:nmax; aa = chebcoeffs(fn); loglog(kk,1./(kk.^4),'r',... kk,abs(aa(1:(nmax+1))),'b.',.... 'MarkerSize',35,... 'LineWidth',3) title('Magnitude of Chebyshev coefficient: f(x) = abs(x)^3') xlabel('k') ylabel('|a_k|') legend('Exact k^{-4}','|a_{k}|') hold off figure(2) loglog(nn,1./(nn.^3),'r',... nn,err,'b.',.... 'MarkerSize',35,... 'LineWidth',3) title('Errors of Chebyshev interpolants in sup norm: f(x) = abs(x)^3') xlabel('n') ylabel('||f - f_n||') legend('Exact n^{-3}','||f - f_{n}||') keyboard return %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function DRIVER_analytic x = chebfun('x'); f = 1/(1 + 25*x*x); nn = (2.^(0:12))-1; err = 0*nn; for j = 1:length(nn) n = nn(j); fn = chebfun(f,n+1); err(j) = norm(f-fn,inf); end hold off figure(1) nmax = max(nn); fn = chebfun(f,2*nmax); kk = 0:nmax; aa = chebcoeffs(fn); loglog(kk,abs(aa(1:(nmax+1))),'b.',.... 'MarkerSize',30,... 'LineWidth',3) title('Magnitude of Chebyshev coefficient: f(x) = 1/(1 + 25*x*x)') xlabel('k') ylabel('|a_k|') hold off figure(2) loglog(nn,err,'b.',.... 'MarkerSize',35,... 'LineWidth',3) title('Errors of Chebyshev interpolants in sup norm: f(x) = 1/(1 + 25*x*x)') xlabel('n') ylabel('||f - f_n||') keyboard return %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function DRIVER_entire x = chebfun('x'); f = sin(27.3*x); nn = (2.^(0:12))-1; err = 0*nn; for j = 1:length(nn) n = nn(j); fn = chebfun(f,n+1); err(j) = norm(f-fn,inf); end hold off figure(1) nmax = max(nn); fn = chebfun(f,2*nmax); kk = 0:nmax; aa = chebcoeffs(fn); loglog(kk,abs(aa(1:(nmax+1))),'b.',.... 'MarkerSize',30,... 'LineWidth',3) title('Magnitude of Chebyshev coefficient: f(x) = sin(27.3*x)') xlabel('k') ylabel('|a_k|') hold off figure(2) loglog(nn,err,'b.',.... 'MarkerSize',35,... 'LineWidth',3) title('Errors of Chebyshev interpolants in sup norm: f(x) = sin(27.3*x)') xlabel('n') ylabel('||f - f_n||') keyboard return %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function DRIVER_Cinfty x = chebfun('x'); f = exp(-1./((1-x)*(1+x))); nn = (2.^(0:12))-1; err = 0*nn; for j = 1:length(nn) n = nn(j); fn = chebfun(f,n+1); err(j) = norm(f-fn,inf); end figure(1) hold off nmax = max(nn); fn = chebfun(f,2*nmax); kk = 0:nmax; aa = chebcoeffs(fn); loglog(kk,abs(aa(1:(nmax+1))),'b.',.... 'MarkerSize',30,... 'LineWidth',3) title('Magnitude of Chebyshev coefficient: f(x) = sin(27.3*x)') xlabel('k') ylabel('|a_k|') figure(2) hold off loglog(nn,err,'b.',.... 'MarkerSize',35,... 'LineWidth',3) title('Errors of Chebyshev interpolants in sup norm: f(x) = sin(27.3*x)') xlabel('n') ylabel('||f - f_n||') figure(3) hold off tt = linspace(-1,1,1000); fff = fn(tt); plot(tt,fff) keyboard return %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%