Introduction
Calculer et tracer la dérivée d'une fonction est une tâche courante en mathématiques et en science des données, notamment pour comprendre le taux de variation dans les systèmes. Python propose plusieurs bibliothèques pour calculer des dérivées numériquement. Cet article vous guidera à travers deux méthodes pour calculer des dérivées en Python : en utilisant la bibliothèque findiff
et la bibliothèque scipy.misc
(désormais obsolète). Nous couvrirons également comment visualiser les résultats avec Matplotlib.
Table des matières
Une dérivée représente le taux de variation d'une fonction par rapport à l'une de ses variables. Pour des fonctions simples, vous pouvez souvent calculer la dérivée analytiquement. Cependant, pour des fonctions plus complexes ou des ensembles de données où aucune expression analytique n'est disponible, vous pouvez utiliser des méthodes numériques pour approcher la dérivée.
En Python, nous pouvons calculer ces dérivées numériques en utilisant des bibliothèques telles que findiff et scipy.misc. Bien que findiff soit un outil moderne et flexible, scipy.misc a été obsolète mais peut encore être utile dans les anciens projets.
Cet article couvre :
- L'installation et l'utilisation de findiff pour calculer des dérivées.
- L'utilisation de l'ancienne fonction scipy.misc pour calculer des dérivées.
- Le traçage de la fonction et de sa dérivée en utilisant matplotlib.
Calcul des dérivées avec findiff
Installation de findiff
La bibliothèque findiff propose des outils pour calculer des dérivées en utilisant des méthodes de différences finies. Tout d'abord, vous devez l'installer :
1 | pip install findiff |
Utilisation de findiff pour calculer des dérivées
Calculons la dérivée d'une fonction quadratique $f(x) = 3x^2 + 2x + 1$ en utilisant findiff et traçons-la en parallèle avec la fonction.
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 | import numpy as np import matplotlib.pyplot as plt from findiff import FinDiff # Définir la fonction f(x) = 3x^2 + 2x + 1 def fonction(x): return 3 * x * x + 2 * x + 1 # Générer des valeurs de x de -2 à 2 x = np.linspace(-2, 2, 100) # Calculer les valeurs de la fonction f(x) y = fonction(x) # Calculer l'espacement de la grille dx dx = x[1] - x[0] # Créer un opérateur de première dérivée par rapport à x deriv = FinDiff(0, dx, 1) # Appliquer l'opérateur de dérivée à f(x) pour obtenir la dérivée f'(x) dy_dx = deriv(y) # Tracer la fonction originale et sa dérivée ax = plt.subplot(111) plt.plot(x, y, label=r'$f(x)=3x^2+2x+1$', color='red',linewidth=1,linestyle='dashed') plt.plot(x, dy_dx, label=r"$f'(x)=6x+2$", color='blue',linewidth=1,linestyle='dashed') # Ajouter des étiquettes et la grille 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() # Afficher le graphique plt.show() |
Explication :
- Définition de la fonction : Nous définissons la fonction $f(x) = 3x^2 + 2x + 1$.
- Espacement de la grille : La variable
dx
représente l'espacement entre les valeurs de $x$, utilisé pour calculer les différences finies. - Opérateur findiff : L'objet
FinDiff(0, dx, 1)
calcule la première dérivée de $f(x)$. - Traçage : La bibliothèque
matplotlib
est utilisée pour tracer la fonction et sa dérivée sur le même graphique pour une comparaison facile.
Avantages de findiff :
- Grande flexibilité : findiff permet de calculer des dérivées d'ordres supérieurs et s'adapte à des espacements de grille personnalisés.
- Applications scientifiques : Il est particulièrement utile dans des simulations scientifiques nécessitant une gestion fine des espacements de grille.
Calcul de la dérivée en un seul point
Findiff ne peut pas être utilisé directement pour calculer la dérivée en un seul point, car il est conçu pour travailler sur des tableaux de valeurs. Il nécessite plusieurs points pour estimer la dérivée en utilisant des différences finies, qui reposent sur les valeurs voisines pour approximer la pente.
Pourquoi findiff ne peut pas fonctionner avec une seule valeur :
- Les méthodes de différences finies estiment la dérivée en évaluant la fonction à plusieurs points, ce qui leur permet de calculer le taux de variation entre ces points.
- Si une seule valeur est fournie, il n'y a pas de points voisins pour calculer la différence, entraînant des erreurs comme "Shift slice out of bounds".
Voici comment utiliser correctement findiff avec un tableau de valeurs pour éviter l'erreur "out of bounds".
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 | import numpy as np import matplotlib.pyplot as plt from findiff import FinDiff # Définir la fonction f(x) = x^2 def fonction(x): return x * x # Générer une plage de valeurs de x (de 1,5 à 2,5, avec 100 points intermédiaires) x = np.linspace(1.5, 2.5, 100) # Calculer les valeurs de la fonction f(x) y = fonction(x) # Calculer l'espacement de la grille dx dx = x[1] - x[0] # Différence entre les valeurs successives de x # Créer un opérateur de première dérivée par rapport à x deriv = FinDiff(0, dx, 1) # Appliquer l'opérateur de dérivée aux valeurs de la fonction y dy_dx = deriv(y) # Pour obtenir la dérivée en un point spécifique (par ex., x=2), trouver l'indice le plus proche : x_value = 2.0 indice_le_plus_proche = np.argmin(np.abs(x - x_value)) # Afficher la dérivée en x = 2 print(f"La dérivée de f(x) = x^2 en x = {x[indice_le_plus_proche]} est approximativement {dy_dx[indice_le_plus_proche]}") # Tracer la fonction et sa dérivée plt.plot(x, y, label=r'$f(x)=x^2$', color='red') plt.plot(x, dy_dx, label=r"$f'(x)=2x$", color='blue') # Ajouter un titre plt.title('Comment calculer et tracer la dérivée \n d\'une fonction avec Matplotlib et Python ?', fontsize=12) # Ajouter des étiquettes et la grille plt.grid(True) plt.axhline(0, color='black', linewidth=1) plt.axvline(0, color='black', linewidth=1) plt.legend() # Afficher le graphique plt.show() |
Alternatives pour calculer la dérivée en un seul point
Si vous souhaitez calculer la dérivée en un seul point numériquement, vous pouvez utiliser soit :
- Différence finie manuelle : Calculer directement la dérivée en utilisant la définition de la dérivée.
- scipy.misc.derivative
: Bien qu'obsolète, cette fonction est adaptée pour des dérivées rapides en un seul point.
Exemple : Calcul de la différence finie manuelle pour une valeur unique
1 2 3 4 5 6 7 8 9 10 11 12 13 | def fonction(x): return x * x # Le point où l'on veut la dérivée x_value = 2.0 # Petite étape pour la différence finie h = 1e-6 # Approximation numérique de la dérivée en utilisant la différence centrale dy_dx = (fonction(x_value + h) - fonction(x_value - h)) / (2 * h) print(f"La dérivée de f(x) = x^2 en x = {x_value} est approximativement {dy_dx}") |
Résultat :
1 | La dérivée de f(x) = x^2 en x = 2 est approximativement 4.000000000115023 |
Explication :
- Formule de la différence centrale : Cette méthode utilise les valeurs de la fonction légèrement avant et après le point cible pour approximer la dérivée :
\begin{equation}
f'(x) \approx \frac{f(x + h) - f(x - h)}{2h}
\end{equation}
- Taille de l'étape (
h
) : Une petite valeur comme1e-6
est utilisée pour garantir une meilleure précision.
Calcul des dérivées avec scipy.misc.derivative (obsolète)
La fonction scipy.misc.derivative était autrefois largement utilisée pour calculer les dérivées, mais elle est maintenant obsolète. Cependant, elle est encore disponible dans certaines versions de
scipy`. Utilisons cette méthode pour calculer la dérivée de la même fonction.
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 | from scipy import misc import numpy as np import matplotlib.pyplot as plt # Définir la fonction f(x) = 3x^2 + 2x + 1 def fonction(x): return 3 * x * x + 2 * x + 1 # Générer des valeurs de x de -2 à 2 x = np.linspace(-2, 2, 100) # Calculer les valeurs de la fonction f(x) y = fonction(x) # Calculer la dérivée en chaque point avec scipy.misc.derivative yp = [misc.derivative(fonction, xi, dx=1e-6) for xi in x] # Tracer la fonction originale et sa dérivée ax = plt.subplot(111) plt.plot(x, y, label=r'$f(x)=3x^2+2x+1$', color='red',linewidth=1,linestyle='dashed') plt.plot(x, yp, label=r"$f'(x)=6x+2$", color='blue',linewidth=1,linestyle='dashed') # Ajouter des étiquettes et la grille 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() # Afficher le graphique plt.show() |
Conclusion
Dans cet article, nous avons exploré deux méthodes pour calculer la dérivée d'une fonction en Python :
- findiff : Une bibliothèque flexible et puissante capable de gérer des dérivées d'ordres différents et de s'adapter à des espacements de grille personnalisés.
- scipy.misc.derivative : Une fonction obsolète de
scipy
encore utilisable dans d'anciens projets, mais à éviter pour les nouveaux développements.
Nous avons également visualisé la fonction et sa dérivée en utilisant matplotlib
, ce qui permet de comparer facilement la fonction originale avec son taux de variation.
Références
Liens | Source |
---|---|
findiff | findiff.readthedocs.io |
derivative | docs.scipy.org |
matplotlib linestyles | matplotlib.org |
Pour des applications modernes ou des simulations scientifiques, il est recommandé d'utiliser findiff
, qui est plus flexible et activement maintenu.