Week 3 - Taylor table method and Matlab code
function[central_diff,forward_diff,backward_diff,central_error,forward_error,backward_error]=taylor_table_scheme(x,dx,exact_derivative)
%numerical derivative
%central difference scheme
central_diff=((-1*exp(x+(2*dx))*cos(x+(2*dx)))+(16*exp(x+dx)*cos(x+dx))+(-30*exp(x)*cos(x))+(16*exp(x-dx)*cos(x-dx))+(-1*exp(x-(2*dx))*cos(x-(2*dx))))./(12*(dx))
%skewed forward difference scheme
forward_diff=((45*exp(x)*cos(x))+(-154*exp(x+dx)*cos(x+dx))+(214*exp(x+(2*dx)))*cos(x+(2*dx))+(-156*exp(x+(3*dx))*cos(x+(3*dx)))+61*exp(x+(4*dx))*cos(x+(4*dx)))
%skewed backward difference scheme
backward_diff=((45*exp(x)*cos(x))+(-154*exp(x-dx)*cos(x-dx))+(214*exp(x-(2*dx))*cos(x-(2*dx)))+(-156*exp(x-(3*dx))*cos(x-(3*dx)))+(61*exp(x-(4*dx))*cos(x-(4*dx))))
%errors of numerical discretization
central_error=abs(exact_derivative-central_diff);
forward_error=abs(exact_derivative-forward_diff);
backward_error=abs(exact_derivative-backward_diff);
end
clear all
close all
clc
%function is f(x)=exp(x)*cos(x)
x=pi/4;
dx=linspace(pi/20,pi/400,40);
%Exact derivative
exact_derivative=-2*exp(x)*sin(x);
for i=1:length(dx)
[central_diff(i),forward_diff(i),backward_diff(i),central_error(i),forward_error(i),backward_error(i)]=taylor_table_scheme(x,dx(i),exact_derivative);
endfor
figure
plot(dx,central_error,'r-')
hold on
plot(dx,forward_error,'b-')
hold on
plot(dx,backward_error,'g-')
xlabel('dx')
ylabel('error')
