Week 3.5 - Deriving 4th order approximation of a 2nd order derivative using Taylor Table method
Aim:
To derive and write a program for in MATLAB for 4th order approximation for second order derivative by following methods
1. Central difference
2. Skewed right sided difference
3. Skewed left sided difference
Objective:
1. To evaluate the second order derivative of the function f(x)=exp (x) cos (x), Using above mentioned order of approximations.
2. To plot and compare the values and errors the 3 methods derived.
Theory and derivations:
During solving a CFD problem we may come across partial derivative equation which consists 2nd order derivative. Since due to complexity of the equation we may have to choose numerical approach rather that analytical. But when dealing with numerical approach we try to make the error margin as low as possible.
As the order of approximation get higher, we get higher accuracy. Hence, we are going to derive the three methods of approximation for an analytical function. The methods are following.
1. Central difference:
Here the nodes selected are symmetrical i.e. the data is taken from both sides of point of focus. Using Taylor’s method, we get
π2π/ππ₯2=ππ(π−2)+ππ(π−1)+ππ(π)+ππ(π+1)+ππ(π+2)
Here there are two nodes taken from both side of the point of focus i.e. f(i).
(NOTE: To select the number of nodes in consideration, we use following expression:
N=p+q-1 for central differencing
N=p+q for skewed differencing
Here N is no.of nodes, p is order of derivative and q is order of approximation.)
Taylor’s table for Central difference:
| F(x) |
|
dx2 f ’’(x) |
dx3 f ’’’(x) |
dx4 f ’’’’(x) |
dx5 f ’’’’’(x) |
|
| af(i-1) | a | -2a | 4a/2 | -8a/6 | 16a/24 | -32a/120 |
| bf(i-2) | b | -b | b/2 | -b/6 | b/24 | -b/120 |
| cf(i) | c | 0 | 0 | 0 | 0 | 0 |
| df(i+1) | d | d | d/2 | d/6 | d/24 | d/120 |
| ef(i+2) | e | 2e | 4e/2 | 8e/6 | 16e/24 | 32e/24 |
| af(i-2)+bf(i-1) +cf(i) +df(i+1) +ef(i+2) |
0 | 0 | 1 | 0 | 0 | ? |
This table transform into matrix of type AX=B
[ 1 1 1 1
−2−1 0 1 2
4/2 1/2 0 1/2 4/2
1 2 3 4 5
−8/6−1/6 0 1/6 8/6
16/24 1/24 0 1/24 16/24] ∗ [ π
π
π
π
π] = [ 0
0
1
0
0]
On Further solving we get the values of the unknown
i.e. Values a= -0.0833 b= 1.3333 c= -2.5000 d= 1.3333 e= -0.0833
These coefficient will further used in code to get the value of derivative.
2. Skewed right sided difference:
When the data point of the left nodes are not available (at initial boundary Conditions) then we have to rely on the available data set.
π2π/ππ₯2=ππ(π)+ππ(π+1)+ππ(π+2)+ππ(π+3)+ππ(π+4)+ππ(π+5)
Taylor’s table for Skewed right difference:
| F(x) | dx f ’(x) |
dx2 f ’’(x) |
dx3 f ’’’(x) |
dx4 f ’’’’(x) |
dx5 f ’’’’’(x) |
|
| af(i) | a | 0 | 0 | 0 | 0 | 0 |
| bf(i+1) | b | b | b | b/2 | b/6 | b/120 |
| cf(i-2) | c | 2c | 4c/2 | 8c/6 | 16c/24 | 32c/120 |
| df(i) | d | 3d | 9d/2 | 27d/2 | 81d/24 | 243d/120 |
| ef(i+1) |
e |
4e | 16e/2 | 64e/ | 256e/24 | 1024e/120 |
| ff(i+2) | f | 5f | 125f/2 | 125f/6 | 25f/24 | 3125f/120 |
| af(i) +bf(i+1) +cf(i+2) +df(i+3) +ef(i+4) +ff(i+5) |
0 | 0 | 1 | 0 | 0 | 0 |
This table transform into matrix of type AX=B:
[ 1 1 1 1 1
0 1 2 3 4 5
0 1/2 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] ∗ [ π
π
π
π
π
π]=
[ 0
0
1
0
0]
On Futher solving we get the values of the unknown
i.e. Values= a=3.7500 b=-12.8333 c=-0.8333 d=-13.000
E=5.0833 f=-0.8333
These coefficients will further used in code to get the value of derivative.
3. Skewed left sided difference:
When the data point of the right nodes are not available (at boundary condition) then we have to rely on the available data set.
π2π/ππ₯2=ππ(π−5)+ππ(π−4)+ππ(π−3)+ππ(π−2)+ππ(π−1)+ππ(π)
Taylor’s table for Skewed right sided difference:
| F(x) | dx f ’(x) |
dx2 f ’’(x) |
dx3 f ’’’(x) |
dx4 f ’’’’(x) |
dx5 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/120 |
| 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 |
| af(i-5) +bf(i-4) +cf(i-3) +df(i-2) +ef(i-1) +ff(i) |
0 | 0 | 1 | 0 | 0 | 0 |
This table transform into matrix of type AX=B:
[ 1 1 1 1 1
−5 −4 −3 −2 −1 0
25/2 16/2 9/2 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/1200] ∗ [ π
π
π
π
π
π] = [ 0 0
1 0
0]
On further solving we get the values of the unknown i.e.
Values a=-0.8333 b=5.0833 c=13.000 d=17.8333 e= -12.8333 f=3.7500
These coefficient will further used to get the values of derivative.
Steps Involved:
1. We assign the value of x and range of dx
2. We define an anonymous function if analytical function and its derivative.
3. Use the matrices from above discussed section and solved it using inversion method i.e.
AX=B → X=A^-1B
And stored the coefficient in cf1, cf2, cf3.
4. Assigned the rows and column to the appropriate matrices.
5. Loop the order of approximation expression in for loop under the range of dx. Here absolute error is also calculated from the derivative value calculated analytically.
6. The calculated valued are plotted to do a better comparisons.
MATLAB CODE:
clear allclose allclc%analytical function defination and value assignmentx=pi/3;dx=linspace(pi/10,pi/1000,100);f=@(x)(exp(x)*cos(x));g=@(x)(-2*exp(x)*sin(x));d2f=g(x);func=f(x);%for central difference scheme%coefficient taken from taylor's tableP=[1 1 1 1 1-2 -1 0 1 24/2 1/2 0 1/2 4/2-8/6 -1/6 0 1/6 8/616/24 1/24 0 1/24 16/24];C=[0;0;1;0;0];%as P*a=C i.e.a=inverse(p)*c(fastest way to getby '')cf1=PC;%for right skewwd difference schemeQ=[1 1 1 1 1 10 1 2 3 4 50 1/2 2 9/2 16/2 25/20 1/6 8/6 27/6 64/6 125/60 1/24 16/24 81/24 256/24 625/240 1/120 32/120 243/120 1024/120 3125/120];D=[0;0;1;0;0;0];%as Q*b=s i.e. b=inverse(Q)*s(fastest way to getby '')cf2=QD;%for right skewwd difference schemeR=[1 1 1 1 1 1-5 -4 -3 -2 -1 025/2 16/2 9/2 2 1/2 0-125/6 -64/6 -27/6 -8/6 -1/6 0625/24 256/24 81/24 16/24 1/24 0-3125/120 -1024/120 -243/120 -32/120 -1/120 0];E=[0;0;1;0;0;0];%as n*b=s i.e. b=inverse(n)*s(fastest way to getby '')cf3=RE;%calculating values of derivative using CDS RSDC, LSDC%defining variable size before using in loopcentral_diff=zeros(1,100);err_central=zeros(1,100);right_sdiff=zeros(1,100);err_right=zeros(1,100);left_sdiff=zeros(1,100);err_left=zeros(1,100);for i=1:length(dx)%calculating value and error by central difference schemecentral_diff(i)=(cf1(1)*f(x-2*dx(i))+cf1(2)*f(x-dx(i))+cf1(3)*f(x)+cf1(4)*f(x+dx(i))+cf1(5)*f(x+2*dx(i)))/(dx(i))^2;err_central(i)=abs(central_diff(i)-d2f);%calculating value and error by right skewed different schemeright_sdiff(i)=(cf2(1)*f(x)+cf2(2)*f(x+dx(i))+cf2(3)*f(x+2*dx(i))+cf2(4)*f(x+3*dx(i))+cf2(5)*f(x+4*dx(i))+cf2(6)*f(x+5*dx(i)))/(dx(i))^2;err_right(i)=abs(right_sdiff(i)-d2f);%calculating value and error by left skewed difference schemeleft_sdiff(i)=(cf3(1)*f(x-5*dx(i))+cf3(2)*f(x-4*dx(i))+cf3(3)*f(x-3*dx(i))+cf3(4)*f(x-2*dx(i))+cf3(5)*f(x-dx(i))+cf3(6)*f(x))/(dx(i))^2;err_left(i)=abs(left_sdiff(i)-d2f);end%plotting values of derivativesubplot(2,1,1);hold onfplot(d2f,'--')xlim([-0.05 0.35]);plot(dx,central_diff,'linewidth',2,'color','b');hold onplot(dx,right_sdiff,'linewidth',2,'color','g');hold onplot(dx,left_sdiff, 'linewidth',2,'color','r')legend('analytical value at x=pi/3','central diff','right skewed diff','left skewed diff','Location','Best')xlabel('Grid siza(dx)');ylabel('value');title('Comparision bw value of derivative calculated by diff. order of approximation')hold off%plotting errors in approximation of derivativesubplot(2,1,2)loglog(dx,err_right,'linewidth',2,'color','b');hold onloglog(dx,err_left,'linewidth',2,'color','g');hold onloglog(dx,err_central,'linewidth',2,'color','r');legend ('right skewed diff','left skewed diff','central diff','Location','Best')xlabel('Grid siza(dx)');ylabel('Absolute error');title('Comparision b/w 4th order approximation method for error in calculating d2f/dx2');
Plot:

Result:
1. In first plot we can see that the value of all the approximation approached toward the analytically calculated values as the size of dx gets smaller.
2. On the second plot we can see that the error in the central difference is lowest with respect to other two.
link:
https://documentcloud.adobe.com/link/review?uri=urn:aaid:scds:US:9eee7146-393e-4fed-86b7-6ef6eeb095c0