Taylor Table method for Central and Skewed difference scheme
clear all
close all
clc
%Defining x and dx
x=pi/3;
dx=linspace(pi/4,pi/4000,20);
%Loop
for i=1:length(dx)
Skewed_right_difference_error(i)=skewed_function(x,dx(i))
central_difference_error(i)=central_diff_function(x,dx(i))
Skewed_left_difference_error(i)=skewed_left_side_function(x,dx(i))
forward_diff_error(i)=forward_diff_scheme(x,dx(i))
backward_diff_error(i)=backward_diff_scheme(x,dx(i))
end
figure(1)
loglog(dx,Skewed_right_difference_error,dx,central_difference_error,dx,Skewed_left_difference_error)
xlabel('dx')
ylabel('error')
hold on
loglog(dx,forward_diff_error,dx,backward_diff_error)
legend('Skewed right difference error','central difference error','Skewed left difference error','forward diff error','backward diff error')
%User defined function
function out=func(x)
out=exp(x)*cos(x)
end
%Skewed right side difference scheme
function error1=skewed_right_side_function(x,dx)
%Analytic function=exp(x)*cos(x)
%first derivative=-exp(x)*sin(x)+exp(x)*cos(x)
Analytical_second_order_derivative=-2*exp(x)*sin(x)
%Numerical derivative
%Skewed right side
Skewed_second_order_derivative=((3.75*func(x))-(12.833*func(x+dx))+(17.8333*func(x+(2*dx)))-(13.0*func(x+(3*dx)))+(5.0833*func(x+(4*dx)))-(0.833*func(x+(5*dx))))/(dx)^2;
%Error
error1=abs(Skewed_second_order_derivative-Analytical_second_order_derivative)
end
%Central differencing scheme
function error2=central_diff_function(x,dx)
%Analytic function=exp(x)*cos(x)
%first derivative=-exp(x)*sin(x)+exp(x)*cos(x)
Analytical_second_order_derivative=-2*exp(x)*sin(x);
%Numerical derivative
%Central differencing
central_differencing=((-1/12*func(x-(2*dx)))+(4/3*func(x-dx))+(-5/2*func(x))+(4/3*func(x+dx))+(-1/12*func(x+(2*dx))))/(dx)^2;
%Error
error2=abs(central_differencing-Analytical_second_order_derivative)
end
%Skewed left side difference scheme
function error3=skewed_left_side_function(x,dx)
%Analytic function=exp(x)*cos(x)
%first derivative=-exp(x)*sin(x)+exp(x)*cos(x)
Analytical_second_order_derivative=-2*exp(x)*sin(x)
%Numerical derivative
%Skewed right side
Skewed_second_order_derivative=((3.75*func(x))-(12.833*func(x-dx))+(17.8333*func(x-(2*dx)))-(13.0*func(x-(3*dx)))+(5.0833*func(x-(4*dx)))-(0.833*func(x-(5*dx))))/(dx)^2;
%Error
error3=abs(Skewed_second_order_derivative-Analytical_second_order_derivative)
end
%Program for value of coefficient
function coeff=value_of_coefficient()
%Value of coefficient for skewed right side difference
syms a b c d e f
eq_1skr=a+b+c+d+e+f==0;
eq_2skr=0+b+(2*c)+(3*d)+(4*e)+(5*f)==0;
eq_3skr=0+(b/2)+(2*c)+(9/2*d)+(8*e)+(25/2*f)==1;
eq_4skr=0+(b/6)+(4/3*c)+(9/2*d)+(32/3*e)+(125/6*f)==0;
eq_5skr=0+(b/24)+(2/3*c)+(27/8*d)+(32/3*e)+(625/24*f)==0;
eq_6skr=0+(b/120)+(4/15*c)+(81/40*d)+(128/15*e)+(625/24*f)==0;
[A,B]=equationsToMatrix([eq_1skr,eq_2skr,eq_3skr,eq_4skr,eq_5skr,eq_6skr],[a b c d e f])
M=linsolve(A,B)
%Value of coefficient for central difference approximation
syms a b c d e
eq_1skr=a+b+c+d+e==0;
eq_2skr=-2*a-b+0+(d)+(2*e)==0;
eq_3skr=2*a+(b/2)+0+(d/2)+(2*e)==1;
eq_4skr=(-8/6*a)-(b/6)+0+(d/6)+(8/6*e)==0;
eq_5skr=(2/3*a)+(b/24)+0+(d/24)+(2/3*e)==0;
[A,B]=equationsToMatrix([eq_1skr,eq_2skr,eq_3skr,eq_4skr,eq_5skr],[a b c d e])
N=linsolve(A,B)
%Value of coefficient for skewed left side difference
syms a b c d e f
eq_1skr=a+b+c+d+e+f==0;
eq_2skr=0-b-(2*c)-(3*d)-(4*e)-(5*f)==0;
eq_3skr=0+(b/2)+(2*c)+(9/2*d)+(8*e)+(25/2*f)==1;
eq_4skr=0-(b/6)-(4/3*c)-(9/2*d)-(32/3*e)-(125/6*f)==0;
eq_5skr=0+(b/24)+(2/3*c)+(27/8*d)+(32/3*e)+(625/24*f)==0;
eq_6skr=0-(b/120)-(4/15*c)-(81/40*d)-(128/15*e)-(625/24*f)==0;
[A,B]=equationsToMatrix([eq_1skr,eq_2skr,eq_3skr,eq_4skr,eq_5skr,eq_6skr],[a b c d e f])
P=linsolve(A,B)
end
%Forward difference scheme program
function error5=forward_diff_scheme(x,dx)
%Analytic function=exp(x)*cos(x)
%first derivative=-exp(x)*sin(x)+exp(x)*cos(x)
Analytical_second_order_derivative=-2*exp(x)*sin(x)
%Numerical derivative
%Forward difference scheme
Forward_diff_second_derivative=(func(x+(2*dx))-2*func(x+dx)+func(x))/(dx)^2;
error5=abs(Forward_diff_second_derivative-Analytical_second_order_derivative)
end
%Backward difference scheme program
function error6=backward_diff_scheme(x,dx)
%Analytic function=exp(x)*cos(x)
%first derivative=-exp(x)*sin(x)+exp(x)*cos(x)
Analytical_second_order_derivative=-2*exp(x)*sin(x)
%Numerical derivative
%Backward difference scheme
Backward_diff_second_derivative=(func(x)-2*func(x-dx)+func(x-(2*dx)))/(dx)^2;
error6=abs(Backward_diff_second_derivative-Analytical_second_order_derivative)
end
Though among central differencing and skewed difference scheme,central difference scheme is more accurate and gives stable solution,but it is having some disadvantages.
Central difference scheme requires nodes at both sides of node at whom derivative is required ,and skewed method either forward or backward scheme require nodes at either right or left side respectively.So if derivative is required at boundary condition then only skewed scheme works and central difference scheme fails.
