%% Q1(a) answer clear % Testing trigseries x=linspace(0,pi/2,10); [y,err]=trigseries(x); plot(x,y(:,1),'ko',x,y(:,2),'k*');xlabel('x'); hold on; x1=linspace(x(1),x(end),100); plot(x1,sin(x1),'k-',x1,cos(x1),'k--');legend('Sine','Cosine'); print -deps q1_fig2.eps % Checking with different numbers of input variables [y,err]=trigseries(x,15) [y,err]=trigseries(x,15,'sine') [y,err]=trigseries(x,15,'cosine') %% Q1(b) answer n1=1;n2=120;k=1;x1=pi/2; x2=4*x1; for n=n1:n2 [y,err]=trigseries(x1,n,'sine'); err_norm(k,1)=norm(err,inf); [y,err]=trigseries(x2,n,'sine'); err_norm(k,2)=norm(err,inf); k=k+1; end figure;loglog([n1:1:n2],err_norm(:,1),'ok',[n1:1:n2],err_norm(:,2),'k*');xlabel('number of terms');ylabel('L2 error'); grid on; format short e;disp(err_norm) disp('Now plot differences between partial sums'); k=1; for n = n1:1:n2 diff(k,1) = x1.^(2*k-1)./factorial(2*k-1); diff(k,2) = x2.^(2*k-1)./factorial(2*k-1); disp([k, diff(k,1)]); k=k+1; end [y,err]=trigseries(x,n2,'sine') hold on;loglog([n1:1:n2],diff(:,1),'k-',[n1:1:n2],diff(:,2),'k-');xlabel('number of terms');ylabel('Difference in partial sums'); axis([1 200 1e-17 1e3]); legend('error, x','error, 4x','Diff in partial sums');grid on; print -deps q1_fig2.eps disp('Errors become constant once the relative sizes of the new terms in'); disp('the series are smaller than the machine epsilon 2.2204e-16.'); disp('The minimum error is a bit larger than machine precision for x=4pi/2 because the error'); disp('in the Taylor series is significantly greater than machine epsilon larger just before critical number of terms,'); disp('at which point the error cannot decrease any more. This is because the Taylor series converges more slowly for larger x.');