Week 3 - Taylor table method and Matlab code
AIM: -
TO DERIVE THE FOURTH-ORDER APPROXIMATION OF A SECOND ORDER DERIVATIVE FUNCTION FOR THE THREE DIFFERENT SCHEMES
(CENTRAL DIFFERENCE SCHEME, SKEWED RIGHT&LEFT SIDED DIFFERENCE SCHEME)
TO FIND: -
1. CENTRAL DIFFERENCE
2. SKEWED RIGHT-SIDED DIFFERENCE
3. SKEWEWD LEFT-SIDED DIFFERENCE
ANALYTICAL FUNCTION: -
EVALUATE THE ABOVE ANALYTICAL FUNCTION & COMPARE IT WITH THE THREE NUMERICAL APPROXIMATIONS MENTIONED ABOVE.
CODE EXPLANATION: -
FOR EQUATING THE EQUATIONS WHICH WE CREATED WITH THE TAYLOR TABLE, WE USE ‘’SYMS’’ COMMAND TO SOLVE THE EQUATIONS.
AFTER SOLVING THE RESPECTIVE EQUATIONS FOR THE THREE DIFFERENT SCHEMES, WE GET THE COEFFICIENTS OF THE VARIABLES USED IN
THAT EQUATION.
CREATING A FUNCTION TO EVALUATE THE THREE NUMERICAL FUNCTION WITH THE ANALYTICAL DERIVATIVE.
CREATING A PROGRAM FOR CALLING THE RESPECTIVE FUNCTION AND ALSO TO CREATE PLOTS WHICH COMPARES THE THREE NUMERICAL
APPROXIMATIONS.
left skewed difference
clc
close all
clear all
%for left skewed difference
A=[ 1 1 1 1 1 1;
0 -1 -2 -3 -4 -5;
0 1/2 2 9/2 8 25/2 ;
0 (-1/6) (-4/3) (-27/6) (-64/6) (-125/6);
0 1/24 2/3 81/24 256/24 625/24;
0 (-1/120) (-32/120) (-243/120) (-1024/120) (-3125/120)]
B=[0; 0; 1;0 ;0 ;0]
solution= inv(A)*B
check=sum(solution)
Main program
clear all
close all
clc
x=pi/3;
dx=linspace(pi/40,pi/4000,20);
analytical_derivative= (-2)*exp(x)*sin(x);
for i=1:length(dx)
central_differencing(i)= ((-2.5*epx(x))+(1.334*epx(x-dx(i)))-(0.0833*epx(x-(2*dx(i))))+(1.334*epx(x+dx(i)))-(0.0833*epx(x+(2*dx(i)))))/(dx(i)^2);
skewed_left_differencing(i)=((3.75*epx(x))-(12.833*epx(x-dx(i)))+(17.833*epx(x-(2*dx(i))))-(13*epx(x-(3*dx(i))))+(5.0833*epx(x-(4*dx(i))))-(0.833*epx(x-(5*dx(i)))))/(dx(i)^2);
skewed_right_differencing(i)=((3.75*epx(x))-(12.833*epx(x+dx(i)))+(17.833*epx(x+(2*dx(i))))-(13*epx(x+(3*dx(i))))+(5.0833*epx(x+(4*dx(i))))-(0.833*epx(x+(5*dx(i)))))/(dx(i)^2);
Forward_difference(i)= ((epx(x+dx(i)))-(epx(x)))/dx(i);
backward_difference(i)= ((epx(x))-(epx(x-dx(i))))/dx(i);
end
%error calculation
central_error=abs(analytical_derivative-central_differencing);
skewed_left_error=abs(analytical_derivative-skewed_left_differencing);
skewed_right_error=abs(analytical_derivative-skewed_right_differencing);
forward_error=abs(analytical_derivative-Forward_difference);
backward_error=abs(analytical_derivative-backward_difference);
loglog(dx,central_error,'--r','lineWidth',2)
grid on
hold on
loglog(dx,skewed_left_error,'b','lineWidth',2)
hold on
loglog(dx,skewed_right_error,':g','lineWidth',2)
legend('central error','skewed left error','skewed right error')
title('Comparison of error from different schemes')
xlabel('dx values')
ylabel('Error values')
function out = epx(x)
out=exp(x)*cos(x);
end
Central difference <Left-skewed difference ~Right-skewed difference