Week 3 - Taylor table method and Matlab code
1. Finding the nodes for cd, skewed right & skewed left.
1. For central difference, number of node = p+q-1
=2+4-1
=5
2.For skewed right & skewed left , number of node = p+q
=2+4
= 6
where, p= order of derivation
q= order of approximation
2. Central Difference
as we have derived 4 node for central difference we derive the following eq.
`((a*f_(i-2))+(b*f_(i-1))+(c*fi)+(d*f_(i+1))+(e*f_(i+2)))/(dx^2)`
Taylor table:-
now by solving matrix we get coffecients;
A1= [1 1 1 1 1;
-2 -1 0 1 2;
4/2 1/2 0 1/2 4/2;
-8/2 -1/6 0 1/6 8/2;
16/24 1/24 0 1/24 16/24 ]
B1= [0;0;1;0;0]
coefficients_central_differencing = A1\B1
coefficients_central_differencing =
a= -0.083333
b= 1.333333
c= -2.500000
d= 1.333333
e= -0.083333
2. Skewed right-sided difference
In Skewed right-sided difference we have derived 6 nodes,
`therefore ((a*fi)+(b*f(i+1)+(c*f(i+2)+(d*f(i+3))+(e*f(i+4))+(g*f(i+5))]]]/(dx^2)`
by solving the matrix we get,
A2=[1 1 1 1 1 1;
0 1 2 3 4 5;
0 1/2 4/2 9/2 16/2 25/2;
0 1/6 8/6 27/6 64/6 125/6;
0 1/24 16/24 81/24 256/24 625/24;
0 1/120 32/120 243/120 1024/120 3125/120];
B2=[0;0;1;0;0;0];
coefficient_skewed_right= A2\B2
coefficient_skewed_right =
a=3.75000
b=-12.83333
c=17.83333
d=-13.00000
e=5.08333
g=-0.83333
3. Skewed left-sided difference
In Skewed left-sided differencewe have derived 6 nodes,
`((a*f(i-5))+(b*f(i-4))+(c*f(i-3))+(d*f(i-2))+(e*f(i-1))+(g*fi))/(dx^2)`
by solving the matrix we get,
A3=[1 1 1 1 1 1;
-5 -4 -3 -2 -1 0;
25/2 16/2 9/2 4/2 1/2 0;
-125/6 -64/6 -27/6 -8/6 -1/6 0;
625/24 256/24 81/24 16/24 1/24 0;
-3125/120 -1024/120 -243/120 -32/120 -1/120 0; ];
B3=[0;0;1;0;0;0];
coefficient_skewed_left= A3\B3
coefficient_skewed_left =
a=-0.83333
b=5.08333
c=-13.00000
d=17.83333
e=-12.83333
f=3.75000
- To prove that skewed schemes are fourth-order accurate
as we know that skewed schemes have 6node we get 6 terms so let us consider another term.
hence, as shown below we say that skewed schemes are fourth-order accurate.
- Program
1. function for central difference
function central_diffence = central_diffence_taylor_s (x,dx)
A1= [1 1 1 1 1;
-2 -1 0 1 2;
4/2 1/2 0 1/2 4/2;
-8/2 -1/6 0 1/6 8/2;
16/24 1/24 0 1/24 16/24 ];
B1= [0;0;1;0;0];
X1= A1\B1;
% coefficients_central_differencing
a= X1(1:1,1);
b= X1(2:2,1);
c= X1(3:3,1);
d= X1(4:4,1);
e= X1(5:5,1);
fi_m_2 = (exp(x-(2*dx)))*(cos(x-(2*dx)));
fi_m_1 =(exp(x-(dx)))*(cos(x-(dx)));
fi =(exp(x))*(cos(x));
fi_p_1=(exp(x+(dx)))*(cos(x+(dx)));
fi_p_2=(exp(x+(2*dx)))*(cos(x+(2*dx)));
central_diffence =((a*fi_m_2)+(b*fi_m_1)+(c*fi)+(d*fi_p_1)+(e*fi_p_2))/(dx^2);
endfunction
2.function for Skewed right-sided difference
function skewed_right = skewed_right_taylor_s (x,dx)
A2=[1 1 1 1 1 1;
0 1 2 3 4 5;
0 1/2 4/2 9/2 16/2 25/2;
0 1/6 8/6 27/6 64/6 125/6;
0 1/24 16/24 81/24 256/24 625/24;
0 1/120 32/120 243/120 1024/120 3125/120];
B2=[0;0;1;0;0;0];
X2= A2\B2;
%coefficient_skewed_right
a= X2(1:1,1);
b= X2(2:2,1);
c= X2(3:3,1);
d= X2(4:4,1);
e= X2(5:5,1);
g= X2(6:6,1);
fi_p_5=(exp(x+(5*dx)))*(cos(x+(5*dx)));
fi_p_4=(exp(x+(4*dx)))*(cos(x+(4*dx)));
fi_p_3=(exp(x+(3*dx)))*(cos(x+(3*dx)));
fi_p_2=(exp(x+(2*dx)))*(cos(x+(2*dx)));
fi_p_1=(exp(x+(dx)))*(cos(x+(dx)));
fi=(exp(x)*cos(x));
skewed_right= ((a*fi)+(b*fi_p_1)+(c*fi_p_2)+(d*fi_p_3)+(e*fi_p_4)+(g*fi_p_5))/(dx^2);
end
3.function for Skewed left-sided difference
function skewed_left = skewed_left_taylor_s (x,dx)
%skewed left side
A3=[1 1 1 1 1 1;
-5 -4 -3 -2 -1 0;
25/2 16/2 9/2 4/2 1/2 0;
-125/6 -64/6 -27/6 -8/6 -1/6 0;
625/24 256/24 81/24 16/24 1/24 0;
-3125/120 -1024/120 -243/120 -32/120 -1/120 0; ];
B3=[0;0;1;0;0;0];
X3= A3\B3;
%coefficient_skewed_left
a= X3(1:1,1);
b= X3(2:2,1);
c= X3(3:3,1);
d= X3(4:4,1);
e= X3(5:5,1);
g= X3(6:6,1);
fi_m_5=(exp(x-(5*dx)))*(cos(x-(5*dx)));
fi_m_4=(exp(x-(4*dx)))*(cos(x-(4*dx)));
fi_m_3=(exp(x-(3*dx)))*(cos(x-(3*dx)));
fi_m_2=(exp(x-(2*dx)))*(cos(x-(2*dx)));
fi_m_1=(exp(x-(dx)))*(cos(x-(dx)));
fi=(exp(x)*cos(x));
skewed_left= ((a*fi_m_5)+(b*fi_m_4)+(c*fi_m_3)+(d*fi_m_2)+(e*fi_m_1)+(g*fi))/(dx^2);
end
- MAIN PROGRAM :-
close all
clear all
clc
x= pi/3;
dx= linspace(pi/5,pi/50, 10);
% exp(x)*cox(x)
% analytical_derivative= -2*exp(x)*sin(x);
analytical_derivative= (-2*exp(x)*sin(x));
for i= 1:length(dx)
central_diffence(i)= central_diffence_taylor_s(x,dx(i));
forward_skewed_right(i)=skewed_right_taylor_s(x,dx(i));
backward_skewed_left(i)=skewed_left_taylor_s(x,dx(i));
% ERRORS
error_central_diffence(i)= abs(central_diffence(i)-analytical_derivative);
error_skewed_right(i)= abs(forward_skewed_right(i)-analytical_derivative);
error_skewed_left(i)= abs(backward_skewed_left(i)-analytical_derivative);
end
loglog(dx,error_central_diffence,'b','marker','d','linewidth',1)
hold on;
loglog(dx,error_skewed_right,'k','marker','s','linewidth',1)
hold on;
loglog(dx,error_skewed_left,'r','marker','p','linewidth',1)
grid on;
legend('error central diffence','error skewed right','error skewed left','location','southeast')
xlabel('dx')
ylabel('ERROR')
grid on
title('VALUE OF ERROR FOR CD, SKEWED RIGHT AND SKEWED LEFT')
- PLOT
- Skewed scheme
In skewed scheme we either take node from right side or left side which make it compatible where we have to consider boundry conditions durin computing. In central difference nodes are taken from both side which reduces error as can see in above plot. Skewed schemes are usefull whene flow parameters are from right to left or left to right. In such cases skewed can give high accuracy then Central difference.