# Numerical Derivative

We are going to develop a Matlab function to calculate the numerical derivative of any unidimensional scalar function fun(x) at a point x0. The function is going to have the following functionality:

Usage:    D = Deriv(fun, x0)
fun: name of the unidimensional scalar function
(string)

x0: point of interest (scalar)
D: derivative of fun at x0 (scalar)

As you may remember, the very well known way to analytically derivate any function is calculating:

This roughly means that we have to find the value of the function in two very close values (one of them is the point of interest), get the difference of those values and divide it by the displacement of the independent variable. In other words,

First step:
Find , where is a very small value compared to x.

Second step:
Obtain the difference .

Third step:

Divide the result above by the small value .

The result is the numerical derivative of your function.

We can implement this algorithm very easily in Matlab, in this way:

function D = Deriv(fun, x0)
% |delta| is relative to |x0|
delta = x0 / 1000;
if x0 == 0
% avoids delta = 0 (**arbitrary value**)
delta = 1e-12;
end
f1 = feval ( fun, x0 + delta );
f2 = feval ( fun, x0 - delta );
D = (f1 - f2) / (2 * delta);

Note, that we are really evaluating

which should be the same as explained above, since the displacement is almost zero. You can try both options.

Function 'feval' evaluates a given function (the string in the parameter fun) in a specific value (number in second parameter of 'feval').

Now, let's try our derivative function. We create a function in a separate m-file:

function y = inverse(x)
y = 1/x;

And we can call it like this:

Deriv('inverse', 1)

The result is:
Expected:     -1    Obtained:    -1.0000

Deriv('inverse', 5)

The result is:
Expected:     -0.04    Obtained:    -0.0400

We can save another totally arbitrary (unidimensional scalar) function in a different m-file:

function y = myfun(x)
y = 3*x^2 + 2*x;

And we can perform the derivative in several ways...

f = 'myfun'
x = 0
Deriv(f, x)

The result is:
Expected:     2    Obtained:     2

x = 5
Deriv(f, x)

The result is:
Expected:     32    Obtained:    32.0000

Deriv(f, -3)

The result is:
Expected:    -16    Obtained:     -16.0000

From 'Derivative' to home

From 'Derivative' to 'Matlab Cookbook'