Évaluer numériquement une expression avec evalf() et N() en SymPy Python

1. À propos de l'évaluation numérique avec SymPy

La bibliothèque SymPy travaille principalement avec des expressions mathématiques exactes. Par exemple, les nombres pi, sqrt(2) ou une fraction comme 1/3 peuvent être conservés sous une forme symbolique exacte.

Lorsque nous souhaitons obtenir une approximation décimale, SymPy propose principalement la méthode evalf() et la fonction N().

Le programme suivant montre la différence entre une valeur exacte et son approximation numérique.

Sortie :

L'expression sqrt(2) est exacte, tandis que le résultat retourné par evalf() est une approximation numérique.

2. Évaluer une expression avec evalf()

La méthode evalf() permet d'obtenir directement une évaluation numérique d'une expression SymPy. Sans argument, elle utilise généralement une précision d'environ 15 chiffres significatifs.

Le programme suivant évalue numériquement le nombre π.

Sortie :

La constante pi reste exacte tant que nous ne demandons pas explicitement son approximation.

La méthode evalf() peut naturellement être appliquée à une expression plus complexe.

Sortie :

SymPy évalue numériquement l'ensemble de l'expression tout en conservant l'expression originale sous sa forme symbolique.

3. Choisir la précision avec evalf()

La méthode evalf() accepte un argument permettant de préciser le nombre de chiffres significatifs souhaité. Cette possibilité est particulièrement utile lorsque les calculs nécessitent une précision supérieure à la précision habituelle des nombres flottants Python.

Le programme suivant affiche π avec différentes précisions.

Sortie :

L'argument passé à evalf() représente une précision exprimée en chiffres significatifs et non simplement un nombre de chiffres après la virgule.

Le même principe peut être appliqué à une expression quelconque.

Sortie :

4. Évaluer une expression avec N()

La fonction N() constitue une autre manière d'obtenir une approximation numérique d'une expression SymPy. Elle reçoit l'expression à évaluer comme premier argument.

Le programme suivant utilise N() pour obtenir une approximation de √2.

Sortie :

Comme avec evalf(), nous pouvons demander une précision particulière en fournissant un second argument à N().

Sortie :

La syntaxe générale est donc N(expression, precision).

5. Comprendre la différence entre evalf() et N()

La méthode evalf() et la fonction N() réalisent essentiellement la même opération : elles demandent une évaluation numérique d'une expression SymPy.

La principale différence visible concerne leur syntaxe. evalf() est appelée comme méthode de l'expression, tandis que N() reçoit l'expression comme argument.

Le programme suivant compare les deux écritures.

Sortie :

Les deux méthodes donnent ici le même résultat. Nous pouvons donc choisir l'écriture qui convient le mieux au programme : expression.evalf(n) ou N(expression, n).

6. Évaluer une expression contenant des variables

Une expression contenant encore un symbole indéterminé ne peut pas toujours être transformée entièrement en nombre. La méthode evalf() évalue alors les parties numériques tout en laissant les variables symboliques présentes.

Le programme suivant évalue une expression contenant la variable x.

Sortie :

La variable x reste symbolique, tandis que π et les parties numériques sont convertis en nombres approchés.

La méthode evalf() permet également de fournir directement une valeur numérique pour un symbole grâce à l'option subs.

Sortie :

Le dictionnaire fourni à subs indique ici que x doit prendre la valeur 3 au moment de l'évaluation numérique.

7. Utiliser subs() avant l'évaluation numérique

Une autre méthode très courante consiste à effectuer d'abord une substitution avec subs(), puis à demander l'approximation numérique avec evalf() ou N().

Le programme suivant remplace x par 3 avant d'effectuer l'évaluation numérique.

Sortie :

Cette méthode permet de conserver d'abord le résultat exact 9*pi, puis de calculer son approximation uniquement lorsque cela est nécessaire.

Nous pouvons procéder de la même manière avec plusieurs variables.

Sortie :

L'intérêt de cette approche est de conserver le plus longtemps possible le résultat exact avant de passer à son approximation décimale.

8. Évaluer des constantes et fonctions mathématiques

Les méthodes evalf() et N() peuvent être utilisées avec les constantes et les nombreuses fonctions mathématiques disponibles dans SymPy.

Le programme suivant évalue numériquement plusieurs constantes et expressions.

Sortie :

Nous pouvons également évaluer des expressions contenant des fonctions trigonométriques, exponentielles ou logarithmiques.

Sortie :

SymPy calcule d'abord les expressions de manière symbolique, puis produit leur approximation avec la précision demandée.

9. Conserver la précision dans les calculs numériques

Pour profiter pleinement de la haute précision de SymPy, il est préférable de construire les expressions avec des nombres SymPy exacts plutôt qu'avec des nombres float Python déjà arrondis.

Le programme suivant utilise Rational pour représenter exactement la fraction 1/3 avant de demander une approximation de 50 chiffres significatifs.

Sortie :

SymPy possède ici la valeur exacte 1/3 et peut donc calculer autant de chiffres que la précision demandée le permet.

En revanche, si une approximation Python a déjà été introduite avant la création de l'objet SymPy, augmenter ensuite la précision d'affichage ne permet pas de retrouver les informations perdues lors de cet arrondi initial.

Sortie possible :

Le nombre 0.1 a d'abord été créé comme float Python, dont la représentation binaire est déjà approchée. Demander ensuite davantage de chiffres ne transforme pas cette approximation initiale en valeur exacte 1/10.

Lorsque nous voulons représenter exactement un nombre décimal comme 0,1, nous pouvons utiliser une chaîne de caractères lors de la création du nombre SymPy.

Sortie :

Il est donc recommandé de conserver les nombres sous une forme exacte aussi longtemps que possible, puis d'effectuer l'évaluation numérique à la fin du calcul.

10. À retenir !

SymPy permet de travailler avec des expressions exactes puis d'obtenir leurs approximations grâce à evalf() et N().

  • evalf() permet d'obtenir l'approximation numérique d'une expression SymPy.
  • N() est une autre manière d'effectuer une évaluation numérique.
  • expression.evalf(n) demande une précision de n chiffres significatifs.
  • N(expression, n) permet de demander la même précision avec la fonction N().
  • evalf() et N() donnent généralement des résultats équivalents.
  • Une expression contenant encore des symboles peut rester partiellement symbolique après evalf().
  • evalf(subs={...}) permet de fournir des valeurs aux symboles lors de l'évaluation.
  • subs() peut être utilisé avant evalf() afin de conserver d'abord une expression exacte.
  • Une grande précision ne permet pas de récupérer une précision déjà perdue lors de l'utilisation prématurée d'un float Python.
  • Il est préférable de conserver les expressions exactes aussi longtemps que possible et d'effectuer l'évaluation numérique à la fin.

Le programme suivant rassemble les principales utilisations de evalf() et N() avec une expression contenant π et √2.

Sortie :

 




 


Auteur : Younes Derfoufi
Lieu de travail : CRMEF OUJDA
Site Web : www.tresfacile.net
Chaine YouTube : https://www.youtube.com/user/InformatiquesFacile
Me contacter : https://www.tresfacile.net/me-contacter/


Leave a Reply

Your email address will not be published. Required fields are marked *