Week 3 - Taylor table method and Matlab code
AIM: To compare three schemes and find the one with least errors for given function
Given:-
1. function = exp(x)*cos(x)
2. No. of nodes for central difference=order of accuracy(P) +order of derivative(Q)-1 = 5
as,P=4(fourth order approximation),Q=2 (second order derivative)
3. No. of nodes for Skewed difference=order of accuracy(P) +order of derivative=6
as,P=4(fourth order approximation),Q=2 (second order derivative)
Body of Content:-
Derivation of schemes
1. Central difference :-
By talylor series
dx^2 f''(x)= y(1)f(x-2dx)+y(2)f(x-dx)+y(3)f(x)+y(4)f(x+dx)+y(5)f(x+2dx)
f"(x)= (y(1)f(x-2dx)+y(2)f(x-dx)+y(3)f(x)+y(4)f(x+dx)+y(5)f(x+2dx))/dx^2
2. skewed right sided difference:-
f"(x)=(y(1)f(x)+y(2)f(x+dx)+y(3)f(x+2dx)+y(4)f(x+3dx)+y(5)f(x+4dx)+y(6)f(x+5dx))/dx^2;
3. skewed left sided difference:-
f"(x)=(y(1)f(x)+y(2)f(x-dx)+y(3)f(x-2dx)+y(4)f(x-3dx)+y(5)f(x-4dx)+y(6)f(x-5dx))/dx^2;
Steps to solve these equations:
1. open all the functions with help of taylor series. For ex.
`f(x+2dx) =f(x)+2dx f′(x)+(2dx)^2/2f′′(x)+(2dx)^3/6f′′′(x)+O(2dx4)`
similarly,we will be opening all the functions and compare all values and calculate values of coefficient using matrix.
2. Then will put coefficients value in equations.
Our actual second derivative of function f(exp(x)*cos(x))=-2*sin(x)*exp(x)
we will compare its value with central difference,skewed right sided difference,skewed left sided difference and find errors and try to compare them to find one scheme with least error for that function.
clear all
close all
clc
x=pi/4;
dx=linspace(pi/4000,pi/40,20);
analytical_derivative= (-2)*sin(x)*exp(x);
for i=1:length(dx);
skewed_right_sided_error(i)=skewed_right_sided_difference(x,dx(i));
skewed_left_sided_error(i)=skewed_left_sided_difference(x,dx(i));
central_error(i)=central_scheme_differencing(x,dx(i));
end
figure
plot(central_error,dx);
hold on
plot(skewed_right_sided_error,dx,'r');
hold on
plot(skewed_left_sided_error,dx,'g');
xlabel('dx');
ylabel('error');
legend('central_error','skewed_right_sided_error','skewed_left_sided_error');
centre_scheming_differencing_code
function central_error=central_scheme_differencing(x,dx)
analytical_derivative= (-2)*sin(x)*exp(x);
a=[1 1 1 1 1
-2 1 0 1 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];
b=[0 0 1 0 0]';
y=[inv(a)*b];
central_scheme_differencing=(y(1)*(exp(x-2*dx)*cos(x-2*dx))+y(2)*(exp(x-dx)*cos(x-dx))+y(3)*(exp(x)*cos(x))+y(4)*(exp(x+dx)*cos(x+dx))+y(5)*(exp(x+2*dx)*cos(x+2*dx)))/(dx^2);
central_error=abs(central_scheme_differencing-analytical_derivative);
end
skewed_right_sided_scheme_code
function skewed_right_sided_error = skewed_right_sided_difference(x,dx)
analytical_derivative= (-2)*sin(x)*exp(x);
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 9/2 32/3 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]';
y=[inv(a)*b];
skewed_right_sided_difference=(y(1)*(exp(x)*cos(x))+y(2)*(exp(x+dx)*cos(x+dx))+y(3)*(exp(x+2*dx)*cos(x+2*dx))+y(4)*(exp(x+3*dx)*cos(x+3*dx))+y(5)*(exp(x+4*dx)*cos(x+4*dx))+y(6)*(exp(x+5*dx)*cos(x+5*dx)))/(dx^2);
skewed_right_sided_error=abs(skewed_right_sided_difference-analytical_derivative);
end
skewed left sided scheme code
function skewed_left_sided_error=skewed_left_sided_difference(x,dx)
analytical_derivative= (-2)*sin(x)*exp(x);
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 -9/2 -32/3 -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]';
y=[inv(a)*b]';
skewed_left_sided_difference=(y(1)*(exp(x)*cos(x))+y(2)*(exp(x-dx)*cos(x-dx))+y(3)*(exp(x-2*dx)*cos(x-2*dx))+y(4)*(exp(x-3*dx)*cos(x-3*dx))+y(5)*(exp(x-4*dx)*cos(x-4*dx))+y(6)*(exp(x-5*dx)*cos(x-5*dx)))/(dx^2);
skewed_left_sided_error=abs(skewed_left_sided_difference-analytical_derivative);
end
Conclusion:
1. Central difference came out to be least error scheme.
2. Right sided difference came out to be with most error.
3. For different derivative order and order of approximation function,most and least error scheme differ.
Skewed scheme is useful because more the number of points to calculate more will be the accuracy.