Comment calculer et tracer des dérivées avec Python — NumPy, Findiff et Matplotlib

Introduction

En Python, calculer et visualiser des dérivées est assez simple grâce à des bibliothèques comme NumPy et Matplotlib. Que vous travailliez avec des fonctions analytiques ou des données discrètes, ces outils permettent d’approximer des dérivées et de les représenter clairement.

Dans cet article, nous allons nous concentrer sur des méthodes pratiques pour calculer des dérivées numériquement et tracer à la fois une fonction et sa dérivée. Nous verrons également comment représenter une tangente en un point donné.

Qu’est-ce qu’une dérivée ?

La dérivée d’une fonction représente la pente de la droite tangente à la courbe en un point donné.

Numériquement, on l’approxime souvent à l’aide des différences finies :

\begin{equation}
f'(x) \approx \frac{f(x + h) - f(x - h)}{2h}
\end{equation}

Cette formule correspond à la méthode des différences centrées. Elle constitue la base de nombreux calculs de dérivées numériques en Python.

En pratique, cela signifie que l’on estime la pente en observant comment la fonction varie légèrement avant et après un point donné.

Outils Python pour calculer des dérivées numériques

Méthode Tableaux Valeur unique Statut Vitesse
numpy.gradient ⭐ Recommandé Rapide
findiff Actif Moyenne
Différence manuelle Toujours valide Rapide
scipy.misc ❌ Déprécié Lent

Recommandation : utilisez numpy.gradient dans la plupart des cas.

Méthode 1 — Avec NumPy, méthode recommandée

NumPy est la bibliothèque standard pour le calcul numérique en Python. C’est souvent le meilleur choix pour calculer des dérivées. Elle est rapide, ne nécessite pas de dépendance supplémentaire et convient très bien aux grands jeux de données.

La fonction numpy.gradient estime les dérivées à l’aide de différences finies. Elle fournit une solution simple et efficace pour la majorité des applications.

Calculer et tracer une dérivée avec NumPy

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
import numpy as np
import matplotlib.pyplot as plt

# Fonction
def fonction(x):
    return np.sin(x) + 0.3*x

# Données
x = np.linspace(-4, 4, 200)
y = fonction(x)

# Dérivée numérique
dy_dx = np.gradient(y, x)

# ---- Point d'intérêt ----
x0 = 1.5

# Indice le plus proche
idx = np.argmin(np.abs(x - x0))

y0 = y[idx]
slope = dy_dx[idx]

# ---- Créer un court segment tangent ----
dx_local = 0.5   # contrôle la longueur du segment tangent

x_tan = np.linspace(x0 - dx_local, x0 + dx_local, 20)
y_tan = y0 + slope * (x_tan - x0)

# ---- Figure ----
ax = plt.subplot(111)

plt.plot(x, y, label=r'$f(x)=\sin(x)+0.3x$', color='black')

# Segment tangent local uniquement
plt.plot(x_tan, y_tan, color='blue', linewidth=2, label='Tangente locale')

# Mettre en évidence le point
plt.scatter(x0, y0, color='red', zorder=3)

# Style
plt.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')

plt.axhline(0, color='black', linewidth=0.1)
plt.axvline(0, color='black', linewidth=0.1)

plt.legend()
plt.title("Droite tangente locale en un point")

plt.show()

Comment calculer et tracer des dérivées avec Python — NumPy, Findiff et Matplotlib
Comment calculer et tracer des dérivées avec Python — NumPy, Findiff et Matplotlib

Dérivée en un seul point

Lorsque vous avez uniquement besoin de calculer la dérivée en une valeur précise, vous pouvez utiliser directement la formule des différences finies :

1
2
3
4
5
6
7
8
9
def f(x):
    return x**2

x0 = 2.0
h = 1e-6

dy_dx = (f(x0 + h) - f(x0 - h)) / (2*h)

print(dy_dx)

Résultat :

1
 4.0

Choisir la taille du pas h

Le choix de h est important pour le calcul des dérivées numériques. Si h est trop grand, l’approximation devient imprécise. À l’inverse, si h est trop petit, les erreurs de précision numérique peuvent dominer.

En pratique, des valeurs de h comprises entre $10^{-5}$ et $10^{-7}$ offrent généralement un bon compromis entre précision et stabilité.

Tracer une droite tangente en un point

En un point donné $x_0$, la dérivée donne la pente de la droite tangente.

L’équation de la tangente est :

\begin{equation}
y=f(x_0) + f'(x_0)(x-x_0)
\end{equation}

Prenons par exemple :

\begin{equation}
f(x)=sin(x)+0.3x
\end{equation}

Code :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
import numpy as np
import matplotlib.pyplot as plt

# Fonction
def fonction(x):
    return np.sin(x) + 0.3*x

# Données
x = np.linspace(-4, 4, 200)
y = fonction(x)

# Dérivée numérique
dy_dx = np.gradient(y, x)

# ---- Point d'intérêt ----
x0 = 1.5

# Indice le plus proche
idx = np.argmin(np.abs(x - x0))

y0 = y[idx]
slope = dy_dx[idx]

# ---- Créer un court segment tangent ----
dx_local = 0.5   # contrôle la longueur du segment tangent

x_tan = np.linspace(x0 - dx_local, x0 + dx_local, 20)
y_tan = y0 + slope * (x_tan - x0)

# ---- Figure ----
ax = plt.subplot(111)

plt.plot(x, y, label=r'$f(x)=\sin(x)+0.3x$', color='black')

# Segment tangent local uniquement
plt.plot(x_tan, y_tan, color='blue', linewidth=2, label='Tangente locale')

# Mettre en évidence le point
plt.scatter(x0, y0, color='red', zorder=3)

# Style
plt.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')

plt.axhline(0, color='black', linewidth=0.1)
plt.axvline(0, color='black', linewidth=0.1)

plt.legend()
plt.title("Droite tangente locale en un point")

plt.show()

Comment calculer et tracer des dérivées avec Python — NumPy, Findiff et Matplotlib
Comment calculer et tracer des dérivées avec Python — NumPy, Findiff et Matplotlib

Méthode 2 — Avec findiff

findiff est une bibliothèque plus flexible pour calculer des dérivées numériques, en particulier lorsque vous avez besoin de dérivées d’ordre supérieur ou d’un meilleur contrôle sur le schéma numérique utilisé.

Elle est bien adaptée aux grilles irrégulières et aux applications scientifiques où la précision et la personnalisation sont importantes.

Dans l’exemple suivant, nous utilisons la fonction :

\begin{equation}
f(x)=x^3 - x
\end{equation}

pour illustrer comment findiff approxime les dérivées à l’aide d’opérateurs de différences finies. Sa dérivée est :

\begin{equation}
f'(x)=3x^2 - 1
\end{equation}

Code :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import numpy as np
import matplotlib.pyplot as plt
from findiff import FinDiff

# Définir la fonction f(x) = x^3 - x
def fonction(x):
    return x**3 - x

# Générer les valeurs de x
x = np.linspace(-2, 2, 100)

# Calculer les valeurs de la fonction
y = fonction(x)

# Espacement de la grille
dx = x[1] - x[0]

# Opérateur de dérivation
deriv = FinDiff(0, dx, 1)

# Calculer la dérivée
dy_dx = deriv(y)

# Figure
ax = plt.subplot(111)

plt.plot(x, y, label=r'$f(x)=x^3 - x$', color='black', linestyle='dashed')
plt.plot(x, dy_dx, label=r"$f'(x)=3x^2 - 1$", color='coral', linestyle='dashed')

# Style
plt.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')

plt.axhline(0, color='black', linewidth=0.1)
plt.axvline(0, color='black', linewidth=0.1)

plt.legend()
plt.title("Fonction et sa dérivée")

plt.show()

Comment calculer et tracer des dérivées avec Python — NumPy, Findiff et Matplotlib
Comment calculer et tracer des dérivées avec Python — NumPy, Findiff et Matplotlib

Références

Image

of