SymPy - Solvers
Poiché i simboli = e == sono definiti come operatori di assegnazione e di uguaglianza in Python, non possono essere usati per formulare equazioni simboliche. SymPy fornisce la funzione Eq () per impostare un'equazione.
>>> from sympy import *
>>> x,y=symbols('x y')
>>> Eq(x,y)
Lo snippet di codice sopra fornisce un output equivalente all'espressione seguente -
x = y
Poiché x = y è possibile se e solo se xy = 0, l'equazione sopra può essere scritta come -
>>> Eq(x-y,0)
Lo snippet di codice sopra fornisce un output equivalente all'espressione seguente -
x − y = 0
Il modulo risolutore in SymPy fornisce la funzione soveset () il cui prototipo è il seguente:
solveset(equation, variable, domain)
Il dominio è per impostazione predefinita S.Complexes. Usando la funzione solveset (), possiamo risolvere un'equazione algebrica come segue:
>>> solveset(Eq(x**2-9,0), x)
Si ottiene il seguente output:
{−3, 3}
>>> solveset(Eq(x**2-3*x, -2),x)
Il seguente output si ottiene dopo aver eseguito lo snippet di codice sopra -
{1,2}
L'output di solveset è un FiniteSet delle soluzioni. Se non ci sono soluzioni, viene restituito un EmptySet
>>> solveset(exp(x),x)
Il seguente output si ottiene dopo aver eseguito lo snippet di codice sopra -
$\varnothing$
Equazione lineare
Dobbiamo usare la funzione linsolve () per risolvere equazioni lineari.
Ad esempio, le equazioni sono le seguenti:
xy = 4
x + y = 1
>>> from sympy import *
>>> x,y=symbols('x y')
>>> linsolve([Eq(x-y,4),Eq( x + y ,1) ], (x, y))
Il seguente output si ottiene dopo aver eseguito lo snippet di codice sopra -
$\lbrace(\frac{5}{2},-\frac{3}{2})\rbrace$
La funzione linsolve () può anche risolvere equazioni lineari espresse in forma di matrice.
>>> a,b=symbols('a b')
>>> a=Matrix([[1,-1],[1,1]])
>>> b=Matrix([4,1])
>>> linsolve([a,b], (x,y))
Otteniamo il seguente output se eseguiamo lo snippet di codice sopra -
$\lbrace(\frac{5}{2},-\frac{3}{2})\rbrace$
Equazione non lineare
A questo scopo, usiamo la funzione nonlinsolve (). Equazioni per questo esempio:
a 2 + a = 0 ab = 0
>>> a,b=symbols('a b')
>>> nonlinsolve([a**2 + a, a - b], [a, b])
Otteniamo il seguente output se eseguiamo lo snippet di codice sopra -
$\lbrace(-1, -1),(0,0)\rbrace$
equazione differenziale
Innanzitutto, crea una funzione indefinita passando cls = Function alla funzione simboli. Per risolvere le equazioni differenziali, usa dsolve.
>>> x=Symbol('x')
>>> f=symbols('f', cls=Function)
>>> f(x)
Il seguente output si ottiene dopo aver eseguito lo snippet di codice sopra -
f(x)
Qui f (x) è una funzione non valutata. Il suo derivato è il seguente:
>>> f(x).diff(x)
Lo snippet di codice sopra fornisce un output equivalente all'espressione seguente -
$\frac{d}{dx}f(x)$
Per prima cosa creiamo un oggetto Eq corrispondente alla seguente equazione differenziale
>>> eqn=Eq(f(x).diff(x)-f(x), sin(x))
>>> eqn
Lo snippet di codice sopra fornisce un output equivalente all'espressione seguente -
$-f(x) + \frac{d}{dx}f(x)= \sin(x)$
>>> dsolve(eqn, f(x))
Lo snippet di codice sopra fornisce un output equivalente all'espressione seguente -
$f(x)=(c^1-\frac{e^-xsin(x)}{2}-\frac{e^-xcos(x)}{2})e^x$