Numerical derivative vs exact derivative
clear all
close all
clc
x = pi/3;
dx = pi/400;
%analytical function
func = sin(x)/x^3;
analytical_derivative = ((x^3*cos(x))-(3*x^2*sin(x)))/x^6;
% First order (forward difference scheme)
%forward_differencing= (f(x+dx)-f(x))/dx
forward_differencing = (((sin(x+dx))/(x+dx)^3) -( sin(x)/x^3))/dx;
%second order (central Differencing Scheme)
central_differencing= ((sin(x+dx)/(x+dx)^3) -( sin(x-dx)/(x-dx)^3))/(2*dx);
%fourth order
%fourth_order = ((sin(x-(2*dx))/(x-(2*dx))^3)-(8*(sin(x-dx)/(x-dx)^3)+(8*(sin(x+dx)/(x+dx)^3))-(sin(x+(2*dx))/(x+(2*dx))^3)))/(12*dx)
%f(j-2) = a
a = (sin(x-(2*dx)))/((x-(2*dx))^3);
b= 8*(sin(x-dx)/(x-dx)^3);
c = 8*(sin(x+dx)/(x+dx)^3);
d = sin(x+(2*dx))/(x+(2*dx))^3;
fourth_order = (a-b+c-d)/(12*dx);
%errors
error_first_order = abs(analytical_derivative-forward_differencing);
error_second_order= abs(analytical_derivative-central_differencing);
error_fourth_order = abs(analytical_derivative-fourth_order);
%c = categorical ({\'error_first_order\',\'error_second_order\',\'error_fourth_order\'});
errors = [error_first_order error_second_order error_fourth_order];
g=bar (errors,\'black\');
h = bar(diag(errors));
L = cell(1,3);
L{1} = \'error first order\'; L{2}= \'error second order\'; L{3}=\'error fourth order\';
set(gca,\'xticklabel\',L)
grid on
ylabel(\'error\')
xlabel(\'method\')
zoom on
%note - the value of the fourth order error is in the order of
%[6.61503134491426e-08] so cannot be visualized properly .