Project

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.

Your portfolio, next

Ship work like this
in your own course.

Talk to a career counsellor

Free 20-minute call. We'll map the right course to where you want to work.

By submitting you agree to our Terms and Privacy Policy.

Talk to a career counsellor

Free 20-minute call. We'll map the right course to where you want to work.

By submitting you agree to our Terms and Privacy Policy.