La bibliothèque SymPy de Python facilite les mathématiques. Voici 6 utilisations pratiques
Agence web » Actualités du digital » La bibliothèque SymPy de Python facilite les mathématiques. Voici 6 utilisations pratiques

La bibliothèque SymPy de Python facilite les mathématiques. Voici 6 utilisations pratiques

Si l’évocation de l’algèbre vous évoque de mauvais souvenirs de cours de mathématiques, une bibliothèque Python appelée SymPy pourrait vous faire changer d’avis sur le sujet. Avec SymPy, les opérations algébriques deviennent plus faciles que les calculs manuels fastidieux et beaucoup plus amusantes. Voici ce que vous pouvez faire avec SymPy.

Qu’est-ce que SymPy ?

SymPy est un système de calcul formel, ou CAS, bibliothèque pour Python. Là où une calculatrice numérique opère sur des nombres, SymPy opère sur des expressions symboliques. C'est similaire à Wolfram Alpha, Mathematica et Maple, mais entièrement gratuit et open source.

D'autres systèmes de calcul formel utilisent leur propre langage, mais comme SymPy utilise Python, si vous connaissez Python, vous connaissez déjà en grande partie SymPy, en dehors des fonctions spécifiques de la bibliothèque.

Avec SymPy, vous pouvez effectuer facilement des calculs algébriques, résoudre des équations, voire des opérations de calcul comme la différenciation et l'intégration, sans tous ces calculs manuels fastidieux.

Avant d'avoir des professeurs de mathématiques sur mon cas, si vous êtes dans une classe où vous devez montrer votre travail manuscrit, SymPy reste un outil pédagogique précieux. Vous pouvez vérifier vos réponses avec SymPy et explorer les concepts plus facilement qu'à la main. Travailler avec un logiciel mathématique de manière interactive encourage un état d'esprit exploratoire, dans lequel vous pouvez exécuter des questions « et si ? » des scénarios, tels que la modification des valeurs d'une fonction pour voir comment son graphique change.

Installation de SymPy

Pour installer SymPy, vous pouvez utiliser pip sur la ligne de commande :

        pip install sympy
    

Vous pouvez également utiliser un outil comme Conda ou Mamba, si vous les utilisez.

Sur Mamba, pour installer dans l'environnement actuel,

        mamba install sympy
    

Définir des variables

Avant de pouvoir travailler avec des variables, vous devrez les définir avec SymPy. La meilleure façon de travailler avec SymPy est dans une session interactive, comme dans IPython ou un notebook Jupyter.

Pour importer tout Sympy dans une session, utilisez cette commande :

        from sympy import *
    

Vous souhaiterez également activer la « jolie impression ». Cela fera en sorte que la sortie de SymPy ressemble davantage à ce que vous verriez dans un manuel de mathématiques ou de sciences. Dans un bloc-notes Jupyter, Sympy affichera la réponse dans LaTeX, un langage de composition largement utilisé dans la publication STEM.

Utilisez simplement la méthode init_printing :

        init_printing()
    

Avec SymPy chargé, nous pouvons commencer à explorer ses capacités.

Vous pouvez simplement saisir un nombre, tel que 2, à l'invite :

        2

SymPy imprimera un 2, bien rendu. La principale différence entre les opérations numériques auxquelles vous pourriez être habitué sur une calculatrice scientifique et un système de calcul formel comme SymPy sera que vous aurez affaire à des approximations à virgule flottante tandis que SymPy traitera des nombres et des symboles exacts.

Prendre la racine carrée avec une bibliothèque numérique par rapport à SymPy démontrera clairement cette différence.

Prenons d'abord la racine carrée avec NumPy :

        import numpy as np
np.sqrt(2)

Vous obtiendrez une approximation numérique, puisque 2 n'est pas un carré parfait.

Comparez cela avec le résultat de SymPy :

        sqrt(2)

Comme ce n'est pas un carré parfait, SymPy le laissera simplement non évalué. Vous pouvez obtenir une approximation numérique si vous en voulez une avec la fonction N.

        N(sqrt(2))
    

Alternativement, vous pouvez ajouter un .evalf() à une opération exacte dont vous souhaitez une approximation numérique.

        sqrt(2).evalf()
    

Je préfère le premier car « N » pour « numérique » me semble plus facile à retenir. C'est également similaire au fonctionnement d'autres programmes mathématiques comme Mathematica.

Plus intéressante est la façon dont SymPy gère les racines carrées qui contiennent des carrés parfaits :

        sqrt(56)
    

SymPy factorisera automatiquement les carrés parfaits à partir des racines carrées.

Pour effectuer des opérations algébriques, vous devez déclarer des variables symboliques. Inspirons-nous de René Descartes et définissons les variables classiques x et y avec la fonction symboles :

        x,y = symbols('x y')
    

Notez qu'entre les variables de la fonction symboles, vous ne tapez pas une virgule, mais un espace à la place.

Si nous les tapons simplement à l'invite, ils seront imprimés d'eux-mêmes.

        x
y
sqrt(x)

Opérations algébriques de base

Une fois les variables définies, nous pouvons effectuer des opérations avec elles. Si vous prenez la racine carrée de x, la racine carrée non évaluée sera affichée sous le symbole radical, tout comme nous l'avons fait avec 2 précédents.

        sqrt(x)
    

Nous pouvons également définir d'autres opérations, telles que l'addition, la multiplication et la division de variables.

        x*2
x*y
2*x * y
2*x + 3*y
x / y
(2*x) / y

Lorsque vous écrivez des expressions algébriques à la main, vous pouvez ignorer le signe de multiplication, vous devrez rendre la multiplication explicite à l'aide de l'opérateur * de Python.

Les parenthèses sont là pour regrouper l'opération 2x, donc SymPy ne pensera pas que nous essayons de diviser x par y puis de multiplier cela par 2.

Vous pouvez également remplacer des variables dans des expressions algébriques avec Sympy.

Définissons une expression :

        expr = 2*x + 3*y
    

Nous pouvons utiliser la méthode subs d'une expression pour substituer une variable à une valeur en fournissant la variable et la valeur par laquelle vous souhaitez la remplacer :

Par exemple, pour remplacer x par 2 :

        expr.subs(x,2)

Vous pouvez également remplacer d'autres expressions :

        expr.subs(x,2*x)
    

Expansion et factorisation

Bien que vous puissiez effectuer des opérations arithmétiques de base dans SymPy, il ne multipliera pas les polynômes les uns par les autres, sauf si vous le lui demandez.

Une expression binomiale comme celle-ci restera inévaluée :

(2*x + 3*y) * (5*x**2 - 4*y)

Pour obtenir les résultats de ces polynômes multipliés, utilisez la fonction expand :

        expand((2*x + 3*y) * (5*x**2 - 4*y))
    

Cela multipliera ces deux polynômes ensemble en utilisant la propriété distributive.

La même chose fonctionne pour des expressions plus grandes, comme un binôme multiplié par un trinôme :

        expand((2*x + 3*y) * (5*x**2 - 4*y))
    

Vous pouvez également factoriser des expressions pour faire l'inverse, pour ramener une opération développée à sa forme originale :

        factor(10*x**3 + 15*x**2*y - 8*x*y - 12*y**2)
    

Résoudre des équations

Vous pourriez passer toute la journée à développer et à factoriser des expressions, mais SymPy est vraiment utile pour résoudre des équations.

Les équations les plus simples à résoudre sont les équations linéaires, telles que 5*x – 3 = 0

Vous pouvez résoudre n’importe quelle équation égale à 0 avec la fonction de résolution :

        solve(5*x - 3,x)
    

L'expression est le premier argument, suivi de la variable que vous souhaitez résoudre.

Si vous avez une équation telle que 2x + 3 = 30, vous pouvez soit réorganiser l'équation pour qu'elle soit égale à 0, soit utiliser un objet Eq. Pour la première méthode, vous soustrayez 30 des deux côtés et résolvez x :

solve(2*x + 3 - 30,x)

Un objet d'égalité vous permettra de représenter les équations sous une forme plus familière. Vous appelez la fonction Eq et fournissez un tuple avec les deux côtés de l'équation.

éq = Éq(2*x + 3,30)

Vous pouvez le résoudre en utilisant la fonction de résolution comme auparavant.

        solve(eq,x)
    

Quoi qu'il en soit, vous obtiendrez les résultats dans une liste. Pour accéder aux valeurs, par exemple pour les utiliser dans une autre fonction, vous pouvez les enregistrer dans un tableau :

        solutions = solve(eq,x)
    

Alors que les équations linéaires simples sont faciles à résoudre à la main, les équations quadratiques sont plus difficiles à résoudre. Ils sont également faciles à résoudre avec Sympy :

        solve(x**2 + 2*x + 3,x)
    

Vous pouvez même résoudre des systèmes d'équations :

        eqn1 = Eq(3*x + 4*y,15)
eqn2 = Eq(5*x - 3*y,30)
solve((eqn1,eqn2),(x,y))

Les crochets indiquent qu'il s'agit de listes. Vous pouvez également utiliser des matrices pour résoudre des systèmes d'équations linéaires de manière plus compacte, ce que je démontrerai plus tard.

Faire des tracés

SymPy vous permet de remplacer votre calculatrice graphique en créant des tracés de fonctions. Vous pouvez utiliser la fonction de tracé intégrée. Traçons une équation linéaire simple :

plot(2*x + 3)

Le format des équations linéaires doit être sous la forme familière de pente à l’origine, y = mx + b, où « m » est la pente. Par défaut, la fonction plot tracera les valeurs x ou toute valeur dans une équation de -10 à 10. Cela s'applique également à toute variable que vous y entrez.

Vous pouvez modifier cela en fournissant un tuple de la variable, la limite inférieure et la limite supérieure. Pour voir le tracé entre x entre 2 et 5 :

        plot(2*x + 3,(x,2,5))
    

La même chose s'applique aux polynômes, tels que le quadratique que nous avons résolu plus tôt :

        plot(x**2 + 2*x + 3)
    

Calcul et algèbre linéaire

Bien qu'ils puissent facilement aborder l'algèbre élémentaire, les systèmes de calcul formel comme Mathematica et Maple sont répandus dans les sciences car ils rendent plus gérables le calcul et l'algèbre linéaire, tous deux omniprésents dans les STEM mais fastidieux à exécuter à la main. Ces calculs apparaissent même dans les sciences sociales comme l’économie.

Je ne vais pas beaucoup expliquer la théorie, mais si vous souhaitez en savoir plus sur le calcul et l'algèbre linéaire, de nombreuses ressources hors ligne et en ligne sont disponibles, telles que Khan Academy et le manuel gratuit d'OpenStax. Leur manuel d'algèbre universitaire décrit également la résolution de systèmes linéaires d'équations avec des matrices. La Khan Academy propose également une série sur l'algèbre linéaire.

Pour prendre une dérivée par rapport à une variable, utilisez la fonction diff :

diff(x**2 + 2*x + 3,x)

Les intégrales fonctionnent de la même manière avec la fonction d'intégration :

integrate(x**2 + 2*x + 3,x)

Cependant, le résultat n'inclut pas la constante d'intégration.

Vous pouvez calculer l'intégrale définie sur un intervalle avec une méthode similaire à la fonction de traçage présentée précédemment. Par exemple, pour calculer l'aire sous la courbe de la fonction précédente pour des valeurs de x comprises entre 0 et 2 :

        
integrate(x**2 + 2*x + 3,(x,0,2))

La résolution de systèmes d’équations linéaires est également simple avec SymPy. Nous pouvons créer une matrice carrée aléatoire 3×3 avec la fonction randMatrix puis la regarder :

        A = randMatrix(3)
A

Nous pouvons créer notre vecteur colonne de variables que nous voulons résoudre de la même manière, en créant une seule colonne avec trois lignes ou une matrice 3×1 :

        b = randMatrix(3,1)
    

Prenons le déterminant pour être sûr que ce système a une solution unique :

        det(A)
    

Puisque le déterminant est non nul, nous pouvons procéder à la résolution de ce système. La matrice de coefficients que nous avons créée a une méthode de résolution que nous pouvons utiliser avec le vecteur colonne comme argument :

        A.solve(b)

En pratique, utiliser NumPy pour une solution numérique pourrait être plus rapide.


Avec SymPy, vous pouvez simplifier les mathématiques symboliques en transformant Python en une super calculatrice. Si vous ne vous êtes jamais considéré comme un « mathématicien », utiliser SymPy pourrait vous transformer en un tel.

★★★★★