Week 3.5 - Deriving 4th order approximation of a 2nd order derivative using Taylor Table method
Week 3.5 - Deriving 4th order approximation of a 2nd order derivative using Taylor Table method:
Objective:
To derive the following 4th order approximation of the second order derivative using
- Central difference
- Skewed rigth-sided difference
- Skewed left-sided difference
First step is to find the number of nodes required for deriving each difference method using the given formula.
After deriving all the difference method, the other step is to compare all the derived difference method with the exact solution and to find the range of error for each difference method using MATLAB.
SCHEME DERIVATIONS:
1.Central difference:
Finding the no of nodes:
The order of accuracy P = Number of nodes in the stencil N - order of derivative Q + 1 (symmetric/central schemes)
Then the Number of nodes N = The order of accuracy P + Order of derivative Q - 1
N = 4+2-1
N = 5
Derivation:
To derive for fourth order approximations for second order derivative, we start with these approximations,

Taylor series expansion for the above terms:
`af(i-2)=af(i)-(2dxf'(i))/(1)+(4adx^2f''(i))/(2)-(4adx^3f'''(i))/(3)+(2adx^4f''''(i))/(3)`
`bf(i-1)=bf(i) - (bdxf'(i))/1 + (bdx^2f''(i))/2 - (bdx^3f'''(i))/6 + (bdx^4f''''(i))/24`
cf(i)=cf(i)
`df(i+1) = df(i) + (d.dxf'(i))/(1!) + (d.dx^2f''(i))/(2!) + (d.dx^3f'''(i))/(3!) + (d.dx^4f''''(i))/(4!)`
`ef(i+2) = ef(i) + (2edxf'(i))/(1!)+(4edx^2f''(i))/(2!)+ (8edx^3f'''(i))/(3!) + (16edx^4f''''(i))/(4!)`
Representing in the form of a table:
| `dx^2f''(i)` | f(i) | f'(i)dx | `f''(i)dx^2` | `f'''(i)dx^3` | `f''''(i)dx^4` |
| af(i-2) | a | -2a | 2a | `(-4a)/3` | `(2a)/3` |
| bf(i-1) | b | -b | `b/2` | `(-b)/6` | `b/24` |
| cf(i) | c | 0 | 0 | 0 | 0 |
| df(i+1) | d | d | `d/2` | `d/6` | `d/24` |
| ef(i+2) | e | `2e` | 2e | `(4e)/3` | `(2e)/3` |
|
sum of co-efficient |
0 | 0 | 1 | 0 | 0 |
`A=[[1,1,1,1,1],[-2,-1,0,0,2],[2,1/2,0,1/2,2],[4/3,1/6,0,1/6,4/3],[2/3,1/24,0,1/24,2/3]]`
`X=[[a],[b],[c],[d],[e]]`
`B=[[0],[0],[1],[0],[0]]`
X=(inv)A*B

2.Rigth side difference:
The order of accuracy P = Number of nodes in the stencil N - order of derivative Q for one-sided/skewed schemes .
Here N = 6

Reprsenting in the form of a table:
| f(x) | dx f'(x) | dx^2 f''(x) | dx^3 f'''(x) | dx^4 f''''(x) | dx^5 f'''''(x) | |
| af(i) | a | 0 | 0 | 0 | 0 | 0 |
| bf(i+1) | b | b | b/2 | b/6 | b/24 | b/120 |
| cf(i+2) | c | 2c | 4c/2 | 8c/6 | 16c/24 | 32c/120 |
| df(i+3) | d | 3d | 9d/2 | 27d/6 | 81d/24 | 243d/120 |
| ef(i+4) | e | 4e | 16e/2 | 64e/6 | 256e/24 | 1024e/120 |
| ff(i+5) | f | 5f | 25f/2 | 125f/6 | 625f/24 | 3125f/120 |
| sum of co-efficient | 0 | 0 | 1 | 0 | 0 | 0 |

3.Skewed left-sided difference:
The order of accuracy P = Number of nodes in the stencil N - order of derivative Q for one-sided/skewed schemes .
Here N = 6.

Representing in the form of a table:
| f(x) | dx f'(x) | dx^2 f''(x) | dx^3 f'''(x) | dx^4 f''''(x) | dx^5 f'''''(x) | |
|
af(i-5) |
a | -5a | 25a/2 | -125a/6 | 625a/24 | -3125a/120 |
|
bf(i-4) |
b | -4b | 16b/2 | -64b/6 | 256b/24 | -1024b/120 |
| cf(i-3) | c | -3c | 9c/2 | -27c/6 | 81c/24 | -243c/12 |
| df(i-2) | d | -2d | 4d/2 | -8d/6 | -16d/24 | -32d/120 |
| ef(i-1) | e | -e | e/2 | -e/6 | e/24 | -e/120 |
| ff(i) | f | 0 | 0 | 0 | 0 | 0 |
| Sum of co-efficient | 0 | 0 | 1 | 0 | 0 | 0 |

MATLAB CODE:
MAIN CODE:
clear all
close all
clc
%value of x
x=pi/3;
%range of dx
dx=linspace(pi/4,pi/4000,20);
%for loop
for i=1:length(dx)
central_differencing(i)=fourth_order_central_differencing(x,dx(i));
right_sided_skew(i)=fourth_order_right_sided_skew(x,dx(i));
left_sided_skew(i)=fourth_order_left_sided_skew(x,dx(i));
end
%plotting
figure(1)
loglog(dx,central_differencing,'b')
hold on
loglog(dx,right_sided_skew,'r')
hold on
loglog(dx,left_sided_skew,'g')
xlabel('range of dx')
ylabel('truncation error')
title('range of dx vs error')
legend('central differencing','skewed rigth sided difference','skewed left sided difference','location','northwest');
Function code for central diffeferencing:
function Error_central_differencing = fourth_order_central_differencing(x,dx);
%analytic function = exp(x)*cos(x)
%analytical derivative
%f''(x)=-2*exp(x)sin(x)
analytical_derivative=-2*exp(x)*sin(x);
%numerical derivative
%central differencing
central_differencing=(((-0.0833)*((exp(x-(2*dx)))*(cos(x-(2*dx)))))+((1.3333)*((exp(x-dx))*((cos(x-dx))))-((2.5000)*((exp(x))*(cos(x))))+((1.3333)*((exp(x+dx))*(cos(x+dx))))-((0.0833)*((exp(x+(2*dx)))*cos(x+(2*dx))))))/(dx^2);
Error_central_differencing=abs(central_differencing-analytical_derivative);
end
Function code for Rigth sided Skew difference:
function Error_right_sided_skew = fourth_order_right_sided_skew(x,dx);
%analytic function = exp(x)*cos(x)
%analytical derivative
%f''(x)=-2*exp(x)sin(x)
analytical_derivative=-2*exp(x)*sin(x);
%numerical derivative
%right sided skew
right_sided_skew=(((3.7500)*((exp(x))*(cos(x))))-((12.8333)*((exp(x+dx))*(cos(x+dx))))+((17.8333)*((exp(x+(2*dx)))*(cos(x+(2*dx)))))-((13.0000)*((exp(x+(3*dx)))*(cos(x+(3*dx)))))+((5.0833)*((exp(x+(4*dx)))*(cos(x+(4*dx)))))-((0.8333)*((exp(x+(5*dx)))*(cos(x+(5*dx))))))/(dx^2);
Error_right_sided_skew=abs(right_sided_skew-analytical_derivative);
end
Function code for left sided Skew difference:
function Error_left_sided_skew = fourth_order_left_sided_skew(x,dx);
%analytic function = exp(x)*cos(x)
%analytical derivative
%f''(x)=-2*exp(x)sin(x)
analytical_derivative=-2*exp(x)*sin(x);
%numerical derivative
%Left sided skew
left_sided_skew=(((-0.8333)*((exp(x-(5*dx)))*(cos(x-(5*dx)))))+((5.0833)*((exp(x-(4*dx)))*(cos(x-(4*dx)))))-((13.0000)*((exp(x-(3*dx)))*(cos(x-(3*dx)))))+((17.8333)*((exp(x-(2*dx)))*(cos(x-(2*dx)))))-((12.8333)*((exp(x-dx))*(cos(x-dx))))+((3.7500)*((exp(x))*(cos(x)))))/(dx^2);
Error_left_sided_skew=abs(left_sided_skew-analytical_derivative);
end
Output Graph:

Conclusion:
As seen from the plot the central differenceing scheme has very less error when compared to the other schemes. Therefore, central differencing scheme is better than other schemes because it uses information from both the sides from the point of consideration to give appropriate and accurate values.
As the left and right skewed difference methods uses data only from one side of point of interest it gives less approximation and accurate values about that point.
The system which doesn't contain sufficient information on both the side of the point of interest in such cases we cannot use central differencing scheme so skewed scheme is useful in such cases.