%% HOW DO I DO THAT IN MATLAB SERIES?
% In this series, I am answering questions that students have asked
% me about MATLAB. Most of the questions relate to a mathematical
% procedure.
%% TOPIC
% How do I find the first derivative of a discrete function y(x) if the
% x values are equidistant.
%% SUMMARY
% Language : Matlab 2010a;
% Authors : Autar Kaw and Sri Garapati;
% Mfile available at
% http://numericalmethods.eng.usf.edu/blog/discrete_diff_equidistant_blog.m
% Last Revised : January 17, 2012;
% Abstract: This program shows you how to differentiate discrete data if
% the x values are equally spaced
clc
clear all
%% INTRODUCTION
disp('ABSTRACT')
disp(' This program shows you how to differentiate discrete data if')
disp(' the x values are equally spaced ')
disp(' ')
disp('AUTHOR')
disp(' Autar Kaw and Sri Garapati of http://autarkaw.wordpress.com')
disp(' ')
disp('MFILE SOURCE')
disp(' http://numericalmethods.eng.usf.edu/blog/discrete_diff_equidistant_blog.m')
disp(' ')
disp('LAST REVISED')
disp(' January 17, 2012')
disp(' ')
%% INPUTS
% Inputs assuming
% that three or more points are given
% all x values are equidistant
% x values are in ascending or descending order.
x=[2.3 3.4 4.5 5.6 6.7 7.8];
y=[4.6 7.9 13.0 12.3 3.2 1.9];
%% DISPLAYING INPUTS
disp(' ')
disp('INPUTS')
% Creating a matrix to print input data as a table
data=[x;y]';
disp(' X Data Y Data')
% Printing the input data as a table
disp(data)
%% THE CODE
% n returns the number of data points
n=length(x);
% delta is the distance between consecutive x values
delta=x(2)-x(1);
% "dy" is an array which stores the value of the derivative at each x-value
% finding the derivative from the 2nd order accurate forward divided
% difference formula at the first data point
dy(1)=(-y(3)+4*y(2)-3*y(1))/(2*delta);
% finding the derivative from the 2nd order accurate central divided
% difference formula at the second to (n-1)th data point
for i=2:1:n-1
dy(i)=(y(i+1)-y(i-1))/(2*delta);
end
% finding the derivative from the 2nd order accurate backward divided
% difference formula at the first data point
dy(n)=(y(n-2)-4*y(n-1)+3*y(n))/(2*delta);
% creating a matrix with input data and calculated derivative value at
% each data point for printing as a table
xdy=[x' y' dy'];
%% DISPLAYING OUTPUTS
disp(' ')
disp('OUTPUTS')
disp(' XData YData Derivative')
% printing the input data points and calculated derivative values(Outputs)
disp(xdy)