On trouvera la documentation du module ici.
Calcul formel avec le module sympy
On trouvera la documentation du module ici.
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
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}]
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]
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
from sympy import Symbol
from sympy.plotting import plot
x = Symbol('x')
plot(x**2+2*x-3)
On obtient :
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 :