Cara menggunakan python numerical derivatives

Numerical differentiation is finding the numerical value of a function’s derivative at a given point.

A practical example of numerical differentiation is solving a kinematical problem. Kinematics describes the motion of a body without considering the forces that cause them to move.

Cara menggunakan python numerical derivatives
Cara menggunakan python numerical derivatives

Here, the coefficients aj and b depend on the n degree of the used interpolation polynomial, that is, on the required accuracy. Coefficients up to the 5th order can be presented in the form of a table:

Cara menggunakan python numerical derivatives
Cara menggunakan python numerical derivatives

You can easily get a formula for the numerical differentiation of a function at a point by substituting the required values of the coefficients.

For example, Euler's method which the simplest numerical method for solving systems of ordinary differential equations, will look like this

Cara menggunakan python numerical derivatives
Cara menggunakan python numerical derivatives

Euler's method can be graphically represented as follows:

Cara menggunakan python numerical derivatives
Cara menggunakan python numerical derivatives

Python Methods for Numerical Differentiation

For instance, let’s take the function y = f (x), y = x2. Then, let’s set the function value in the form of pairs x, y with a step of 0.01 for the range of x from 0 to 4.

We’re going to use the scipy derivative to calculate the first derivative of the function. Please don’t write your own code to calculate the derivative of a function until you know why you need it. Scipy provides fast implementations of numerical methods and it is pre-compiled and tested across many use cases.

import numpy
import matplotlib.pyplot as plt
 
def f(x):
 return x*x
 
x = numpy.arange(0,4,0.01)
y = f(x)
 
plt.figure(figsize=(10,5))
plt.plot(x, y, 'b')
plt.grid(axis = 'both')
plt.show()

Cara menggunakan python numerical derivatives
Cara menggunakan python numerical derivatives

Now, let's take a function from the scipy.misc library and calculate the value of the derivative at the point x = 1. Let’s set the derivation step of the method to 0.001.

To get more information about scipy.misc.derivative, please refer to this manual. It allows you to calculate the first order derivative, second order derivative, and so on. It accepts functions as input and this function can be represented as a Python function. It is also possible to provide the “spacing” dx parameter, which will give you the possibility to set the step of derivative intervals.

# https://docs.scipy.org/doc/scipy-0.18.0/reference/generated/scipy.misc.derivative.html
#
from scipy.misc import derivative
 
d = derivative(f, 1.0, dx=1e-3)
 
print (d)

1.9999999999998352

Also, you can use the library numpy to calculate all derivative values  in range x = 0..4 with step 0.01 as we set in the input function. Then, you can use the np.gradient method. 

import numpy as np
 
dy = np.gradient(y)
dx = np.gradient(x)
 
d = dy/dx
d
 
array([0.01, 0.02, 0.04, 0.06, 0.08, 0.1 , 0.12, 0.14, 0.16, 0.18, 0.2 ,
       0.22, 0.24, 0.26, 0.28, 0.3 , 0.32, 0.34, 0.36, 0.38, 0.4 , 0.42,
       0.44, 0.46, 0.48, 0.5 , 0.52, 0.54, 0.56, 0.58, 0.6 , 0.62, 0.64,
     ...
       7.26, 7.28, 7.3 , 7.32, 7.34, 7.36, 7.38, 7.4 , 7.42, 7.44, 7.46,
       7.48, 7.5 , 7.52, 7.54, 7.56, 7.58, 7.6 , 7.62, 7.64, 7.66, 7.68,
       7.7 , 7.72, 7.74, 7.76, 7.78, 7.8 , 7.82, 7.84, 7.86, 7.88, 7.9 ,
       7.92, 7.94, 7.96, 7.97])

You can also use this option to get a slightly more accurate result than the previous option.

import numpy as np
 
np.gradient(y, x)

array([0.01, 0.02, 0.04, 0.06, 0.08, 0.1 , 0.12, 0.14, 0.16, 0.18, 0.2 ,
       0.22, 0.24, 0.26, 0.28, 0.3 , 0.32, 0.34, 0.36, 0.38, 0.4 , 0.42,
       0.44, 0.46, 0.48, 0.5 , 0.52, 0.54, 0.56, 0.58, 0.6 , 0.62, 0.64,
      ...
       7.26, 7.28, 7.3 , 7.32, 7.34, 7.36, 7.38, 7.4 , 7.42, 7.44, 7.46,
       7.48, 7.5 , 7.52, 7.54, 7.56, 7.58, 7.6 , 7.62, 7.64, 7.66, 7.68,
       7.7 , 7.72, 7.74, 7.76, 7.78, 7.8 , 7.82, 7.84, 7.86, 7.88, 7.9 ,
       7.92, 7.94, 7.96, 7.98, 7.99])

If you look at the graph of the derivative function, you get the following form.

Cara menggunakan python numerical derivatives
Cara menggunakan python numerical derivatives

Error Estimate with an Analytical Form of Differential

An error estimate to calculate the derivative’s numerical value can be done by calculating the formula for the derivative in an analytical way and substituting the value at a desired point.

Cara menggunakan python numerical derivatives
Cara menggunakan python numerical derivatives

For example, for the function we are considering in this example, you can analytically calculate the formula as follows:

y = x2

y ‘ = 2 x

Then, at point x = 4, you will obtain the value of the derivative 8. Numerical methods from previous yielded 7.97 and 7.99 results, which is due to the approximation of the derivative.

The calculated value using the above methods may differ by approximately 0.01. What’s the reason for this discrepancy?

First, you need to choose the correct sampling value for the function. The smaller the step, the more accurate the calculated value will be.

Second, you must choose the order of the integration function similar to the degree of the polynomial of the function being differentiated.

You also need to consider the region of the absolute stability for the given methods of numerical differentiation. For instance, backward and forward Euler methods can show different stability regions, i.e., it is necessary to have a small differentiation step. Please find more information here.

In addition to scipy differentiate, you can also use analytical differentiation in Python. The SymPy package allows you to perform calculations of an analytical form of a derivative. In some cases, you need to have an analytical formula for the derivative of the function to get more precise results. Symbolic forms of calculation could be slow on some functions, but in the research process there are cases where analytical forms give advantage compared to numerical methods.

Conclusion    

The rapidly developing field of data science and machine learning require field specialists who master algorithms and computational methods.

Python is a great ally when solving these types of problems thanks to its developed network of libraries and frameworks.

Knowledge of basic numerical methods is essential in this process. Svitla Systems specialists have profound knowledge in this area and possess extensive practical experience in problem-solving in the field of data science and machine learning.

Request expert help and project development at Svitla Systems, where you will always receive qualified services and quality products.