Week 3.5 - Deriving 4th order approximation of a 2nd order derivative using Taylor Table method
Objective:
Derive the following 4th order approximations of the second-order derivative of exp(x)*cos(x) .
1. Central difference
2. Skewed right-sided difference
3. Skewed left-sided difference
Theory:
f(x)=exp(x)*cos(x)
f'(x)=-exp(x)*sin(x)+exp(x)*cos(x)
f''(x)=-2exp(x)*sin(x)
Then absolute value is -9.620954761930703
Central difference:
symmetric stencil:
Order of Approximation = Number of nodes in the stencil - Order of the Derivative + 1
Number of nodes in the stencil=5
so there is 5 node require for symmetric stencill.
Now f''(x)==af(i-2)+bf(i-1)+cf(i)+df(i+1)+ef(i+2)
The Tallors table for central difference
| f | f' | f'' | f''' | fiv | |
| fi-2 | 1 | -2Δx | (2Δx)2/2! | -(2Δx)3/3! | (2Δx)4/4! |
| fi-1 | 1 | -Δx | (Δx)2/2! | -(Δx)3/3! | (Δx)4/4! |
| fi | 1 | 0 | 0 | 0 | 0 |
| fi+1 | 1 | Δx | (Δx)2/2! | (Δx)3/3! | (Δx)4/4! |
| fi+2 | 1 | 2Δx | (2Δx)2/2! | (2Δx)3/3! | (2Δx)4/4! |
| 0 | 0 | 1 | 0 | 1 |
For asymmetric stencil:
Order of Approximation = Number of nodes in the stencil - Order of the Derivative
Number of nodes in the stencil=6
so there is 6 node require for asymmetric stencill.
Skewed right-sided difference:
f''(x)=af(i)+bf(i+1)+cf(i+2)+df(i+3)+ef(i+4)+gf(i+5)
The Tallors table for Skewed right-sided difference
| f | f' | f'' | f''' | fiv | fv | |
| fi | 1 | 0 | 0 | 0 | 0 | 0 |
| fi+1 | 1 | Δx | (Δx)2/2! | (Δx)3/3! | (Δx)4/4! | (Δx)5/5! |
| fi+2 | 1 | 2Δx | (2Δx)2/2! | (2Δx)3/3! | (2Δx)4/4! | (2Δx)5/5! |
| fi+3 | 1 | 3Δx | (3Δx)2/2! | (3Δx)3/3! | (3Δx)4/4! | (3Δx)5/5! |
| fi+4 | 1 | 4Δx | (4Δx)2/2! | (4Δx)3/3! | (4Δx)4/4! | (4Δx)5/5! |
| fi+5 | 1 | 5Δx | (5Δx)2/2! | (5Δx)3/3! | (5Δx)4/4! | (5Δx)5/5! |
| 0 | 0 | 1 | 0 | 0 | 0 |
Skewed left-sided difference:
f''(x)=af(i)+bf(i-1)+cf(i-2)+df(i-3)+ef(i-4)+gf(i-5)
The Tallors table for Skewed left-sided difference
| f | f' | f'' | f''' | fiv | fv | |
| fi | 1 | 0 | 0 | 0 | 0 | 0 |
| fi-1 | 1 | -Δx | (Δx)2/2! | -(Δx)3/3! | (Δx)4/4! | -(Δx)5/5! |
| fi-2 | 1 | -2Δx | (2Δx)2/2! | -(2Δx)3/3! | (2Δx)4/4! | -(2Δx)5/5! |
| fi-3 | 1 | -3Δx | (3Δx)2/2! | -(3Δx)3/3! | (3Δx)4/4! | -(3Δx)5/5! |
| fi-4 | 1 | -4Δx | (4Δx)2/2! | -(4Δx)3/3! | (4Δx)4/4! | -(4Δx)5/5! |
| fi-5 | 1 | -5Δx | (5Δx)2/2! | -(5Δx)3/3! | (5Δx)4/4! | -(5Δx)5/5! |
| 0 | 0 | 1 | 0 | 0 | 0 |
Matlab program for finding error plot:
close all
clear all
clc
%second order derivative of exp(x)*cos(x)=-2exp(x)*sin(x)
x=pi/2;
dx=linspace(pi/40,pi/400,50);
absolute_value=-2*exp(x)*sin(x);
for i=1:length(dx)
%coefficent for the cental difference
a=cental_deffence(dx(i));
%numerical value of the secon derivative of exp(x)*cos(x)
%f''(x)=af(i-2)+bf(i-1)+cf(i)+df(i+1)+ef(i+2)
numerical_value_central=a(1)*exp(x-(2*dx(i)))*cos(x-(2*dx(i)))+a(2)*exp(x-dx(i))*cos(x-dx(i))+a(3)*exp(x)*cos(x)+a(4)*exp(x+dx(i))*cos(x+dx(i))+a(5)*exp(x+(2*dx(i)))*cos(x+(2*dx(i)))
%coefficent for the forward difference
b=forward_difference(dx(i))
%f''(x)=af(i)+bf(i+1)+cf(i+2)+df(i+3)+ef(i+4)+gf(i+5)
numerical_value_forward=b(1)*exp(x)*cos(x)+b(2)*exp(x+dx(i))*cos(x+dx(i))+b(3)*exp(x+2*dx(i))*cos(x+2*dx(i))+b(4)*exp(x+3*dx(i))*cos(x+3*dx(i))+b(5)*exp(x+4*dx(i))*cos(x+4*dx(i))+b(6)*exp(x+5*dx(i))*cos(x+5*dx(i))
%coefficent for the backward difference
c=backward_difference(dx(i));
%f''(x)=af(i)+bf(i-1)+cf(i-2)+df(i-3)+ef(i-4)+gf(i-5)
numerical_value_backward=c(1)*exp(x)*cos(x)+c(2)*exp(x-dx(i))*cos(x-dx(i))+c(3)*exp(x-2*dx(i))*cos(x-2*dx(i))+c(4)*exp(x-3*dx(i))*cos(x-3*dx(i))+c(5)*exp(x-4*dx(i))*cos(x-4*dx(i))+c(6)*exp(x-5*dx(i))*cos(x-5*dx(i))
error_central(i)=abs(numerical_value_central-absolute_value);
error_forward(i)=abs(numerical_value_forward-absolute_value);
error_backward(i)=abs(numerical_value_backward-absolute_value);
end
figure(1)
plot(dx,error_central)
hold on
plot(dx,error_forward,'yellow','LineWidth',2)
hold on
plot(dx,error_backward,'r','LineWidth',2)
xlabel('delta_x')
ylabel('error')
legend('error_central','error_forward','error_backward')
Function for finding the co-efficent in central difference
function ans=cental_deffence(dx)
B=[0;0;1;0;0]
A=zeros(5,5)
A(1,:)=1;
A(2,1)=-2*dx;
A(2,2)=-dx;
A(2,4)=dx;
A(2,5)=2*dx;
A(3,1)=(2*dx)^2/factorial(2);
A(3,2)=dx^2/factorial(2);
A(3,4)=dx^2/factorial(2);
A(3,5)=(2*dx)^2/factorial(2);
A(4,1)=-(2*dx)^3/factorial(3);
A(4,2)=-(dx)^3/factorial(3);
A(4,4)=(dx)^3/factorial(3);
A(4,5)=(2*dx)^3/factorial(3);
A(5,1)=(2*dx)^4/factorial(4);
A(5,2)=(dx)^4/factorial(4);
A(5,4)=(dx)^4/factorial(4);
A(5,5)=(2*dx)^4/factorial(4);
ans=inv(A)*B
end
Function for finding the co-efficent in Forward difference
function ans=forward_difference(dx)
B=[0;0;1;0;0;0];
A=zeros(6);
A(1,:)=1;
A(2,2)=dx;
A(2,3)=2*dx;
A(2,4)=3*dx;
A(2,5)=4*dx;
A(2,6)=5*dx;
A(3,2)=(dx)^2/factorial(2);
A(3,3)=(2*dx)^2/factorial(2);
A(3,4)=(3*dx)^2/factorial(2);
A(3,5)=(4*dx)^2/factorial(2);
A(3,6)=(5*dx)^2/factorial(2);
A(4,2)=(dx)^3/factorial(3);
A(4,3)=(2*dx)^3/factorial(3);
A(4,4)=(3*dx)^3/factorial(3);
A(4,5)=(4*dx)^3/factorial(3);
A(4,6)=(5*dx)^3/factorial(3);
A(5,2)=(dx)^4/factorial(4);
A(5,3)=(2*dx)^4/factorial(4);
A(5,4)=(3*dx)^4/factorial(4);
A(5,5)=(4*dx)^4/factorial(4);
A(5,6)=(5*dx)^4/factorial(4);
A(6,2)=(dx)^5/factorial(5);
A(6,3)=(2*dx)^5/factorial(5);
A(6,4)=(3*dx)^5/factorial(5);
A(6,5)=(4*dx)^5/factorial(5);
A(6,6)=(5*dx)^5/factorial(5);
ans=inv(A)*B;
end
Function for finding the co-efficent in Forward difference
function ans=backward_difference(dx)
B=[0;0;1;0;0;0];
A=zeros(6);
A(1,:)=1;
A(2,2)=-dx;
A(2,3)=-2*dx;
A(2,4)=-3*dx;
A(2,5)=-4*dx;
A(2,6)=-5*dx;
A(3,2)=(dx)^2/factorial(2);
A(3,3)=(2*dx)^2/factorial(2);
A(3,4)=(3*dx)^2/factorial(2);
A(3,5)=(4*dx)^2/factorial(2);
A(3,6)=(5*dx)^2/factorial(2);
A(4,2)=-(dx)^3/factorial(3);
A(4,3)=-(2*dx)^3/factorial(3);
A(4,4)=-(3*dx)^3/factorial(3);
A(4,5)=-(4*dx)^3/factorial(3);
A(4,6)=-(5*dx)^3/factorial(3);
A(5,2)=(dx)^4/factorial(4);
A(5,3)=(2*dx)^4/factorial(4);
A(5,4)=(3*dx)^4/factorial(4);
A(5,5)=(4*dx)^4/factorial(4);
A(5,6)=(5*dx)^4/factorial(4);
A(6,2)=-(dx)^5/factorial(5);
A(6,3)=-(2*dx)^5/factorial(5);
A(6,4)=-(3*dx)^5/factorial(5);
A(6,5)=-(4*dx)^5/factorial(5);
A(6,6)=-(5*dx)^5/factorial(5);
ans=inv(A)*B;
end
Output:
Error in the central difference is very less as compaire to the forwoard and backward scheame .
why a skewed scheme is useful? What can a skewed scheme do that a CD scheme cannot?
In the case central defference it is very deficlt to calaculate the valu at the end nodes.at the incial grides wecan calculate useing Skewed right-sided difference at the end nodes we can use Skewed left-sided difference.Central diffrence have less error but it can't calculate all the nodes