In [ ]:
from __future__ import division, print_function # Python 3
from sympy import init_printing
init_printing(use_latex='mathjax',use_unicode=False) # Affichage des résultats
In [ ]:
from sympy import Eq
from sympy.abc import x,y
Eq(x, 3)
Out[ ]:
In [ ]:
Eq(x + y, 3)
Out[ ]:
In [ ]:
from sympy import solve
solve(Eq(x, 3), x)
Out[ ]:
In [ ]:
solve(Eq(x + y, 3), x)
Out[ ]:
Dans le premier cas, indiquer la variable x
n'est pas nécessaire:
In [ ]:
solve(Eq(x, 3))
Out[ ]:
Cela fonctionne aussi s'il y a plus d'une solution:
In [ ]:
solve(Eq(x**2, 3))
Out[ ]:
In [ ]:
eq1 = Eq(x + y, 47)
eq2 = Eq(x - y, 33)
[eq1, eq2]
Out[ ]:
In [ ]:
solve([eq1, eq2])
Out[ ]:
Attention: Pour résoudre un système d'équations, il faut absoluement mettre les équations dans une liste [eq1, eq2]
entre crochets []
. Autrement, on obtient une erreur:
In [ ]:
In [279]: solve(eq1, eq2)
Traceback (most recent call last):
...
TypeError: cannot determine truth value of
x - y == 33
Cela fonctionne aussi pour des systèmes d'équations non linéaires. Par exemple pour trouver deux nombres dont la somme est 47 et dont le produit est 510:
In [ ]:
eq1 = Eq(x + y, 47)
eq2 = Eq(x * y, 510)
[eq1, eq2]
Out[ ]:
In [ ]:
solve([eq1, eq2])
Out[ ]:
Souvent on désire résoudre des équations dont l'un des termes est zéro: solve(Eq(expression,0))
. Pour ce cas, il est équivalent d'écrire solve(expression)
et la fonction solve
trouvera les valeurs des variables avec lesquelles expression est évaluée à zéro. Les exemples ci-haut s'écrivent de la façon suivante avec cette syntaxe abrégée:
In [ ]:
solve(x - 3)
Out[ ]:
In [ ]:
solve(x**2 + x - 6)
Out[ ]:
In [ ]:
solve([x + y - 47, x - y - 33])
Out[ ]:
In [ ]:
solve([x + y - 47, x * y - 510])
Out[ ]:
Un exemple sur un polynôme de degré 3:
In [ ]:
solve(x**3 + 2*x**2 - 1, x)
Out[ ]:
La syntaxe abrégée peut aussi être utilisée pour résoudre un système d'équations. Dans l'exemple qui suit, on calcule les points d'intersection d'une ellipse et d'une droite:
In [ ]:
solve( [x**2 + 4*y**2 -2, -10*x + 2*y -15], [x, y])
In [ ]:
____ ____ ____ ____
150 \/ 23 *I 15 5*\/ 23 *I 150 \/ 23 *I 15 5*\/ 23 *I
[(- --- - --------, --- - ----------), (- --- + --------, --- + ----------)]
101 101 202 101 101 101 202 101
In [ ]:
from sympy import roots
roots(x - 7)
Out[ ]:
In [ ]:
roots(x**6)
Out[ ]:
Le résultat est un dictionnaire ({}
) qui associe à chaque racine sa multiplicité. La fonction roots
trouve aussi les racines complexes:
In [ ]:
roots(x**5 - 7*x**4 + 2*x**3 - 14*x**2 + x - 7, x)
Out[ ]:
Les coefficients des polynômes peuvent être des variables symboliques:
In [ ]:
from sympy.abc import a,b,c
roots(a*x + b, x)
Out[ ]:
Mais à ce moment-là, il faut absoluement spécifier par rapport à quelle variable on cherche les racines. Autrement, on obtient une erreur:
In [ ]:
roots(a*x + b)
Out[ ]:
La fonction roots
trouve les formules qui expriment les racines d'un polynôme quadratique:
In [ ]:
roots(a*x**2 + b*x + c, x)
Out[ ]:
On trouvera d'autres exemples (résolution d'équations différentielles) et des explications plus détaillées dans la section $Solver$ du tutoriel de SymPy: http://docs.sympy.org/latest/tutorial/solvers.html