Week 3.5 - Deriving 4th order approximation of a 2nd order derivative using Taylor Table method
Central Difference Function
function err_central_diff=central_diff(x,dx)
analytical_derivative=-2*exp(x)*sin(x);
% Unkown coefficients from taylor table
a=-0.083333;
b=1.333333;
c=-2.5;
d=1.333333;
e=-0.083333;
approx_diff_4th_order=((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);
err_central_diff=abs(approx_diff_4th_order-analytical_derivative);
end
Skewed Right Sided function
function err_skewed_right_diff=skewed_right_side(x,dx)
analytical_derivative=-2*exp(x)*sin(x);
% Unkown coefficients from taylor table
a=3.75;
b=-12.83333;
c=17.83333;
d=-13;
e=5.08333;
g=-0.83333;
approx_skewed_right_sided_4th_order=((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))+(g*exp(x+5*dx)*cos(x+5*dx)))/(dx^2);
err_skewed_right_diff=abs(approx_skewed_right_sided_4th_order-analytical_derivative);
end
Skewed Left Sided Function
function err_skewed_left_diff=skewed_left_side(x,dx)
analytical_derivative=-2*exp(x)*sin(x);
% Unkown coefficients from taylor table
a=-0.83333;
b=5.08333;
c=-13;
d=17.83333;
e=-12.83333;
g=3.75;
approx_skewed_left_sided_4th_order=((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))+(g*exp(x)*cos(x)))/(dx^2);
err_skewed_left_diff=abs(approx_skewed_left_sided_4th_order-analytical_derivative);
end
Main Program
clear all;
close all;
clc;
x=pi/3;
dx=linspace(pi/4,pi/40000,40);
%using for loop over the range of dx
for i=1:length(dx)
err_central_difference(i)=central_diff(x,dx(i));
err_skewed_right_sided(i)=skewed_right_side(x,dx(i));
err_skewed_left_sided(i)=skewed_left_side(x,dx(i));
end
%plotting the graphs for dx vs errors
figure(1)
plot(dx,err_central_difference,'linewidth',2)
hold on
grid on
plot(dx,err_skewed_right_sided,'linewidth',2)
hold on
plot(dx,err_skewed_left_sided,'linewidth',2)
xlabel('dx')
ylabel('error')
legend('Central difference error','Skewed Rightsided error','Skewed Leftsided error')
figure(2)
loglog(dx,err_central_difference,'r','linewidth',2)
hold on
grid on
loglog(dx,err_skewed_right_sided,'g','linewidth',2)
hold on
loglog(dx,err_skewed_left_sided,'b','linewidth',2)
xlabel('dx')
ylabel('error')
legend('Central difference error','Skewed Rightsided error','Skewed Leftsided error')
In your own words, describe why a skewed scheme is useful? What can a skewed scheme do that a CD scheme cannot?
As can be seen from the graphs the central differencing scheme has less error, so it is understandable to use it in most cases. However, central differencing scheme can only be used when both side node data are available, so for a corner or boundary layer points the data from both sides are not available. So, in such case skewed scheme can be used.