Week 3.5 - Deriving 4th order approximation of a 2nd order derivative using Taylor Table method
central differecing:
function error_cerntral_differecing= central_differecing(x,dx);
% analytical function f(x) = exp(x)*cos(x)
% f'' (x) = -2exp(x)*sin(x)
analytical_derivative = -2*exp(x)*sin(x)
%valvus for taylors table
a = -0.083333;
b = 1.333333;
c = -2.500000;
d = 1.333333;
e = -0.083333;
% numerical derivative
% central differecing =
% ((a*f(x-2*dx))+(b*f(x-dx))+(c*f(x))+(d*f(x+dx))+(e*f(x*2*dx))/(dx^2));
%central differecing fourth order approximation
central_differecing_fourth_order_approximation = ((a*exp(x-2*dx)*cos(x-2*dx))+(b*exp(x-dx)*cos(x-dx))+(c*exp(x)*cos(x))+(d*exp(x+dx)*cos(x+dx))+(e*exp(x+2*dx)*cos(x+2*dx)))/dx^2;
error_cerntral_differecing =abs(central_differecing_fourth_order_approximation-analytical_derivative);
end
skewed right side:
function error_skewed_right_side = skewed_right_side(x,dx);
% analytical function f(x) = exp(x)*cos(x)
% f'' (x) = -2exp(x)*sin(x)
analytical_derivative = -2*exp(x)*sin(x)
%valvus for taylors table
a= 3.75000;
b= -12.83333;
c= 17.83333;
d= -13.00000;
e= 5.08333;
f= -0.83333;
% numerical derivative
% skewed right side =
% ((a*f(x))+(b*f(x+dx))+(c*f(x+2*dx))+(d*f(x+3*dx))+(e*f(x+4*dx))+(f*f(x+5*dx))/dx^2);
% skewed right side approximation
skewed_right_side_fourth_order_approximation=((a*exp(x)*cos(x))+(b*exp(x+dx)*cos(x+dx))+(c*exp(x+2*dx)*cos(x+2*dx))+(d*exp(x+3*dx)*cos(x+3*dx))+(e*exp(x+4*dx)*cos(x+4*dx))+(f*exp(x+5*dx)*cos(x+5*dx)))/dx^2;
error_skewed_right_side=abs(skewed_right_side_fourth_order_approximation-analytical_derivative);
end
skewed lift side:
function error_skewed_lift_side = skewed_lift_side(x,dx);
% analytical function f(x) = exp(x)*cos(x)
% f'' (x) = -2exp(x)*sin(x)
analytical_derivative = -2*exp(x)*sin(x)
%valvus for taylors table
a= -0.83333;
b= 5.08333;
c= -13.00000;
d= 17.83333;
e= -12.83333;
f= 3.75000;
% numerical derivative
% skewed lift side =
% ((a*f(x-5*dx))+(b*f(x-4*dx)(c*f(x-3*dx))+(d*f(x-2*dx))+(e*f(x-dx))+(f*f(x))/(dx^2));
% skewed left side approximation
skewed_lift_side_fourth_order_approximation= ((a*exp(x-5*dx)*cos(x-5*dx))+(b*exp(x-4*dx)*cos(x-4*dx))+(c*exp(x-3*dx)*cos(x-3*dx))+(d*exp(x-2*dx)*cos(x-2*dx))+(e*exp(x-dx)*cos(x-dx))+(f*exp(x)*cos(x)))/dx^2;
error_skewed_lift_side=abs(skewed_lift_side_fourth_order_approximation-analytical_derivative);
end
main program:
clear all
close all
clc
x=pi/3;
dx=linspace(pi/10,pi/1000,100);
% using 'for' loop
for i=1:length(dx)
central_differecing_error(i)=central_differecing(x,dx(i));
skewed_right_side_error(i)=skewed_right_side(x,dx(i));
skewed_lift_side_error(i)=skewed_lift_side(x,dx(i));
end
figure(1)
plot(dx,central_differecing_error,'linewidth',2);
hold on
plot(dx,skewed_right_side_error,'r','linewidth',2);
plot(dx,skewed_lift_side_error,'g','linewidth',2);
hold on
xlabel('dx');
ylabel('error');
legend('central differecing error','skewed right side','skewed left side');
figure(2)
loglog(dx,central_differecing_error,'linewidth',2);
hold on
loglog(dx,skewed_right_side_error,'r','linewidth',2);
loglog(dx,skewed_lift_side_error,'g','linewidth',2);
hold on
xlabel('dx');
ylabel('error');
legend('central differecing error','skewed right side','skewed left side');
plots:

