Python en Mathématiques - Niveau 2

Calcul formel avec le module sympy

Le module sympy

On trouvera la documentation du module ici.

Variable formelle

Le module sympy permet de manipuler des variables formelles :


from sympy import Symbol, factor, pprint, expand

x = Symbol('x')
y = Symbol('y')
pprint(x+3+x)
pprint(factor(x**2-y**2))
pprint(expand( x * (x-3) * (x+2) ))

On obtient :

2⋅x + 3
(x - y)⋅(x + y)
 3    2      
x  - x  - 6⋅x

Équation

On peut résoudre quelques équations (le second membre, nécessairement nul, est sous-entendu) :


from sympy import Symbol, solve, pprint

x = Symbol('x')
pprint( solve(x**2 + 2*x + 1) )

y = Symbol('y')
pprint( solve(y**2 + 3*y + 1) )

On obtient :

[-1]
⎡  3   √5    3   √5⎤
⎢- ─ - ──, - ─ + ──⎥
⎣  2   2     2   2 ⎦

Les crochets utilisés sont ceux des listes : la seconde ligne est la liste contenant les deux nombres $ \frac{-3-\sqrt{5}}{2} $ et $ \frac{-3+\sqrt{5}}{2} $.

Et avec des paramètres formels, on explicite lequel de ces paramètres joue le rôle d'inconnue :


from sympy import Symbol,  pprint, solve

x = Symbol('x')
a = Symbol('a')
b = Symbol('b')
c = Symbol('c')
 
pprint(  solve(a*x**2 + b*x + c, x)  )

On obtient :

⎡           __________              ___________⎤
⎢         ╱         2            ╱         2  ⎥
⎢-b - ╲╱  -4⋅a⋅c + b    -b + ╲╱  -4⋅a⋅c + b   ⎥
⎢─────────────────────, ───────────────────────⎥
⎣         2⋅a                    2⋅a            ⎦

Pour un système, on ajoute dict=True pour avoir la correspondance valeur ↔ variable.

Exemple avec la résolution du système : $$ \begin{cases} 2x+3y = 5 \\ 3x+y = 7\end{cases} $$


from sympy import Symbol,  pprint, solve

x = Symbol('x')
y = Symbol('y')
 
pprint( solve( (2*x+3*y-5, 3*x+y-7 ), dict=True ) )

On obtient :

[{x: 16/7, y: 1/7}]

Saisie clavier

On peut interagir avec l'utilisateur avec le convertisseur sympify :


from sympy import Symbol, solve, pprint, sympify

x = Symbol('x')

expression = sympify(input('Entrez le trinôme en x dont vous désirez les racines : '))
pprint( solve(expression) )

On obtient par exemple :

Entrez le trinôme en x dont vous désirez les racines : x**2+2*x-1
[-1 + √2, -√2 - 1]

Évaluer une expression en une valeur


from sympy import Symbol,  pprint 

x = Symbol('x')

expression =  3*x**2 - 2*x +1 

# substitution de x par 1 et évaluation  : 
pprint( expression.subs({x:1}) )
# substitution de x par 2 et évaluation  : 
pprint( expression.subs({x:2}) )

On obtient :

2
9

Tracer une courbe


from sympy import Symbol
from sympy.plotting import plot

x = Symbol('x')

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

On obtient :

courbe

Nous pouvons préciser que l'on veut un tracé sur [-4 ; 3] :


from sympy import Symbol
from sympy.plotting import plot

x = Symbol('x')

plot( x**2+2*x-3, (x, -4, 3) )

On obtient :

courbe