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() |

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() |

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() |

Références
| Ressource | Lien |
|---|---|
| NumPy Gradient | https://numpy.org/doc/stable/reference/generated/numpy.gradient.html |
| findiff | https://findiff.readthedocs.io |
| Matplotlib | https://matplotlib.org |