Calculer et tracer la dérivée d'une fonction avec python

Published: 15 février 2014

DMCA.com Protection Status

Calculer la dérivée d'une fonction numérique est une opération relativement simple à effectuer avec python. En effet, il existe une fonction scipy intitulé derivative dans le module misc, permettant d'obtenir directement la dérivée en un point. Pour illustrer comment marche la fonction "derivative" de scipy, essayons de calculer la dérivée de la fonction $f(x)=x^2$ quand x=2.

Figure 1: Calculer et tracer la dérivée d'une fonction avec python et matplolib.
Figure 1: Calculer et tracer la dérivée d'une fonction avec python et matplolib.

>>> from scipy import misc 
>>> 
>>> def fonction(x): 
...     return x*x
...
>>> misc.derivative(fonction, 2.0) 
4.0

Pour cela il faut tout d'abord importer le module misc grâce à la commande suivante: from scipy import misc Puis, définir une fonction python retournant la valeur de f pour un x donnée, tel que:

def fonction(x): 
    return x*x

Pour connaître la dérivé de cette fonction en x=2 il suffit alors de taper la commande suivante misc.derivative(fonction, 2.0) qui retourne bien la valeur attendue, c'est-à-dire 4.

Maintenant que vous savez comment calculer la dérivée d'une fonction pour un x donné, vous pouvez facilement appliquer cela sur un intervalle donné. Le code python presenté ci-dessous permet par exemple de calculer la derivée de la fonction $f(x)=3x^2+2x+1$ sur l'intervalle [-2,2] et de tracer celle-ci avec la bibliothèque python matplotlib (resultat figure 1).

from pylab import *
from scipy import misc

ax = subplot(111)

def fonction(x):
    return 3*x*x+2*x+1

x = arange(-2.0, 2.0, 0.01)

y = fonction(x)

plot(x, y,'r-')

yp = misc.derivative(fonction, x)

plot(x, yp,'b-')

grid(True)

ax.spines['left'].set_position('zero')
ax.spines['right'].set_color('none')
ax.spines['bottom'].set_position('zero')
ax.spines['top'].set_color('none')

text(-0.75, 6.0,
     r'$f(x)=3x^2+2x+1$', horizontalalignment='center',
     fontsize=18,color='red')

text(-1.0, -8.0,
     r"$f'(x)=6x+2$", horizontalalignment='center',
     fontsize=18,color='blue')

show()
Image

of