SymPy - Solveurs
Comme les symboles = et == sont définis comme des opérateurs d'affectation et d'égalité en Python, ils ne peuvent pas être utilisés pour formuler des équations symboliques. SymPy fournit la fonction Eq () pour configurer une équation.
>>> from sympy import *
>>> x,y=symbols('x y')
>>> Eq(x,y)
L'extrait de code ci-dessus donne une sortie équivalente à l'expression ci-dessous -
x = y
Puisque x = y est possible si et seulement si xy = 0, l'équation ci-dessus peut s'écrire -
>>> Eq(x-y,0)
L'extrait de code ci-dessus donne une sortie équivalente à l'expression ci-dessous -
x − y = 0
Le module solveur de SymPy fournit la fonction soveset () dont le prototype est le suivant -
solveset(equation, variable, domain)
Le domaine est par défaut S.Complexes. En utilisant la fonction solveset (), nous pouvons résoudre une équation algébrique comme suit -
>>> solveset(Eq(x**2-9,0), x)
La sortie suivante est obtenue -
{−3, 3}
>>> solveset(Eq(x**2-3*x, -2),x)
La sortie suivante est obtenue après l'exécution de l'extrait de code ci-dessus -
{1,2}
La sortie de Solveset est un FiniteSet des solutions. S'il n'y a pas de solutions, un EmptySet est retourné
>>> solveset(exp(x),x)
La sortie suivante est obtenue après l'exécution de l'extrait de code ci-dessus -
$\varnothing$
Équation linéaire
Nous devons utiliser la fonction linsolve () pour résoudre des équations linéaires.
Par exemple, les équations sont les suivantes -
xy = 4
x + y = 1
>>> from sympy import *
>>> x,y=symbols('x y')
>>> linsolve([Eq(x-y,4),Eq( x + y ,1) ], (x, y))
La sortie suivante est obtenue après l'exécution de l'extrait de code ci-dessus -
$\lbrace(\frac{5}{2},-\frac{3}{2})\rbrace$
La fonction linsolve () peut également résoudre des équations linéaires exprimées sous forme de matrice.
>>> a,b=symbols('a b')
>>> a=Matrix([[1,-1],[1,1]])
>>> b=Matrix([4,1])
>>> linsolve([a,b], (x,y))
Nous obtenons la sortie suivante si nous exécutons l'extrait de code ci-dessus -
$\lbrace(\frac{5}{2},-\frac{3}{2})\rbrace$
Équation non linéaire
Pour cela, nous utilisons la fonction nonlinsolve (). Équations pour cet exemple -
a 2 + a = 0 ab = 0
>>> a,b=symbols('a b')
>>> nonlinsolve([a**2 + a, a - b], [a, b])
Nous obtenons la sortie suivante si nous exécutons l'extrait de code ci-dessus -
$\lbrace(-1, -1),(0,0)\rbrace$
équation différentielle
Tout d'abord, créez une fonction non définie en passant cls = Function à la fonction de symboles. Pour résoudre des équations différentielles, utilisez dsolve.
>>> x=Symbol('x')
>>> f=symbols('f', cls=Function)
>>> f(x)
La sortie suivante est obtenue après l'exécution de l'extrait de code ci-dessus -
f(x)
Ici f (x) est une fonction non évaluée. Son dérivé est le suivant -
>>> f(x).diff(x)
L'extrait de code ci-dessus donne une sortie équivalente à l'expression ci-dessous -
$\frac{d}{dx}f(x)$
Nous créons d'abord l'objet Eq correspondant à l'équation différentielle suivante
>>> eqn=Eq(f(x).diff(x)-f(x), sin(x))
>>> eqn
L'extrait de code ci-dessus donne une sortie équivalente à l'expression ci-dessous -
$-f(x) + \frac{d}{dx}f(x)= \sin(x)$
>>> dsolve(eqn, f(x))
L'extrait de code ci-dessus donne une sortie équivalente à l'expression ci-dessous -
$f(x)=(c^1-\frac{e^-xsin(x)}{2}-\frac{e^-xcos(x)}{2})e^x$