Comment calculer et tracer la dérivée d'une fonction avec python ?

Published: 15 février 2014

Updated: 05 septembre 2024

Tags: Python;

DMCA.com Protection Status

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.

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

How to Calculate and Plot the Derivative of a Function Using Matplotlib and Python ?
How to Calculate and Plot the Derivative of a Function Using Matplotlib and Python ?

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

How to Calculate and Plot the Derivative of a Function Using Matplotlib and Python ?
How to Calculate and Plot the Derivative of a Function Using Matplotlib and Python ?

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 comme 1e-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 descipy`. 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()

How to Calculate and Plot the Derivative of a Function Using Matplotlib and Python ?
How to Calculate and Plot the Derivative of a Function Using Matplotlib and Python ?

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.

Image

of