% call the function for skewed_left_side_scheme
function skewed_left_error=skewed_left_side_approximation(x,dx)
% analytical derivative = exp(x)*cos(x)
exact_derivative=-2*exp(x)*sin(x);
% Numerical derivative
% skewed_left_side_approximation f(i-5),f(i-4),f(i-3),f(i-2),f(i-1),f(i)
skewed_left_side_approximations=(3.750*(exp(x)*cos(x))-12.83333*(exp(x-dx)*cos(x-dx))+17.83333*(exp(x-(2*dx))*cos(x-(2*dx)))-13.000*(exp(x-(3*dx))*cos(x-(3*dx)))+5.08333*(exp(x-(4*dx))*cos(x-(4*dx)))-0.83333*(exp(x-(5*dx))*cos(x-(5*dx))))/(dx^2);
% skewed_left_side_error
skewed_left_error=abs(skewed_left_side_approximations-exact_derivative)
end
% call the function for skewed_right_side_scheme
function skewed_right_error=skewed_right_side_approximation(x,dx)
% analytical derivative = exp(x)*cos(x)
exact_derivative=-2*exp(x)*sin(x);
% Numerical derivative
% skewed_right_side_approximations f(i),f(i+1),f(i+2),f(i+3),f(i+4),f(i+5)
skewed_right_side_approximations=(3.750*(exp(x)*cos(x))-12.83333*(exp(x+dx)*cos(x+dx))+17.83333*(exp(x+(2*dx))*cos(x+(2*dx)))-13.000*(exp(x+(3*dx))*cos(x+(3*dx)))+5.08333*(exp(x+(4*dx))*cos(x+(4*dx)))-0.83333*(exp(x+(5*dx))*cos(x+(5*dx))))/(dx^2);
% skewed_right_side_error
skewed_right_error=abs(skewed_right_side_approximations-exact_derivative)
end
% call the function for central_difference_scheme
function central_error=central_difference_approximation(x,dx)
% analytical derivative = exp(x)*cos(x)
exact_derivative=-2*exp(x)*sin(x);
% Numerical derivative
% central_difference_approximations
central_difference_approximations=(-0.083333*(exp(x-(2*dx))*cos(x-(2*dx)))+1.333333*(exp(x-dx)*cos(x-dx))-2.5000*(exp(x)*cos(x))+1.333333*(exp(x+dx)*cos(x+dx))-0.083333*(exp(x+(2*dx))*cos(x+(2*dx))))/(dx^2);
% central_difference_error
central_error=abs(central_difference_approximations-exact_derivative)
end
% call the external function
close all
clear all
clc
x=pi/4;
% Define range of dx
dx=linspace(pi/40,pi/400,20);
for i=1:length(dx);
central_difference_error(i)=central_difference_approximation(x,dx(i));
skewed_left_side_error(i)=skewed_left_side_approximation(x,dx(i));
skewed_right_side_error(i)=skewed_right_side_approximation(x,dx(i));
% Plots
loglog(dx,central_difference_error,\'r\')
hold on
loglog(dx,skewed_left_side_error,\'y\')
hold on
loglog(dx,skewed_right_side_error,\'g\')
xlabel(\'Range of dx\')
ylabel(\'Error\')
title(\'Error Comparision of different schemes\')
legend(\'central_difference_error\',\'skewed_left_side_error\',\'skewed_right_side_error\')
end