function convergenceTaylor_vs_Euler() % % y' = -y + 2 cos(t) % y(0) = 1 % exact y(t) = sin t + cos t clear, home, close all format compact format long finalTime = 10; Nv = [40 80 160 320 640 1280 2560 5120]; for j=1:length(Nv) N = Nv(j); dt = finalTime/(N-1); tp = linspace(0,finalTime,N)'; yn = zeros(N,1); yn(1) = exactSolution(0); yt = zeros(N,1); yt(1) = exactSolution(0); t = 0; for n=2:N yn(n) = yn(n-1) + dt*F(yn(n-1),t); yt(n) = yt(n-1) + dt*( -yt(n-1) + 2*cos(t) ) + 0.5*(dt^2)*( yt(n-1) - 2*cos(t) - 2*sin(t) ); t = t + dt; end % for exact = exactSolution(tp); er(j) = abs( exact(N) - yn(N) ); ert(j) = abs( exact(N) - yt(N) ); DT(j) = dt; end % j loglog(DT,er,'b',DT,ert,'r') legend('Euler','Taylor','Location','SouthEast') for i=2:length(Nv); rho(i-1) = log(er(i-1)/er(i))/log(2); rhot(i-1) = log(ert(i-1)/ert(i))/log(2); end disp('Euler convergence rate: ') rho' disp('Euler errors: ') er' disp('Taylor convergence rate: ') rhot' disp('Taylor errors: ') ert' % ----------- nested functions --------------------------------- function f = F(v,t) f = -v + 2.*cos(t); end function ex = exactSolution(t) ex = sin(t) + cos(t); end % ---------------------------------------------------------- end