Equazioni

Eq(...) - linsolve(...) - nonlinsolve(...) - roots(...) - solve(...) - solveset(...)

solve()

Da discutere…

solveset()

Restituisce un insieme con le soluzioni dell’equazione

>>> import sympy as sp

>>> sp.solveset(x - 2)                # Una soluzione reale
    {2}

>>> sp.solveset(x**2 - 2)             # Due soluzioni reali
    {-sqrt(2), sqrt(2)}

>>> sp.solveset(x**2 + 2)             # Due soluzioni complesse (coniugate)
    {-sqrt(2)*I, sqrt(2)*I}

>>> sp.solveset(x**3 + x**2 + x + 1)  # Tre soluzioni...
    {-1, -I, I}

Se compaiono più variabili allora si deve scegliere rispetto a quale si intende risolvere

>>> sp.solveset(x**2 + y, x)
    {-sqrt(-y), sqrt(-y)}

>>> sp.solveset(x**2 + y, y) 
    {-x**2}

Eq()

Se l’equazione è nella forma primo_membro = secondo_membro allora si può scegliere come rappresentarla

La funzione Eq() corrisponde all’operatore di uguaglianza (==) che non funziona con le espressioni simboliche…

sp.solveset(primo_membro - secondo_membro)

sp.solveset(sp.Eq(primo_membro, secondo_membro))

roots()

La funzione restituisce un dizionario delle soluzioni e delle loro molteplicità

>>> sp.solveset(x**3 + 3*x**2 + 3*x + 1)
    {-1}
>>> sp.roots(x**3 + 3*x**2 + 3*x + 1)
    {-1:3}


>>> sp.solveset(x**4 + 6*x**3 + 13*x**2 + 12*x + 4)
    {-2, -1}
>>> sp.roots(x**4 + 6*x**3 + 13*x**2 + 12*x + 4)
    {-2:2, -1:2}

Sistemi di equazioni

In futuro i sistemi di equazioni si risolveranno utilizzando solveset()

linsolve()

Risolve sistemi di equazioni lineari.
Restituisce un insieme con le soluzioni.

La funzione risolve anche sistemi lineari espressi in notazione matriciale.

import sympy as sp

x,y,z = sp.symbols('x y z')

eq1 = x+y+  z-3
eq2 = x+y+2*z-4
eq3 = x+2*y+z-4
sol = sp.linsolve([eq1, eq2, eq3], (x, y, z))  # {(1, 1, 1)}


eq1 = x+y+  z-3
eq2 = x+y+2*z-4
eq3 = x+y+3*z-5
sol = sp.linsolve([eq1, eq2, eq3], (x, y, z))  # {(2-y, y, 1)}

eq1 = x+y+  z-3 
eq2 = x+y+2*z-4 
eq3 = x+y+3*z-4 
sol = sp.linsolve([eq1, eq2, eq3], (x, y, z))  # EmptySet

nonlinsolve()

Risolve sistemi di equazioni non lineari.

Risolve anche sistemi di equazioni con esponenziali, misti, …

Ha qualche difficoltà con le funzioni trigonometriche… dove funziona meglio solve().

eq1 = x**2+y**2-4
eq2 = y
sol = sp.nonlinsolve([eq1, eq2], (x, y))  # {(-2, 0), (2, 0)}

eq1 = x**2+y**2-4
eq2 = y-1 
sol = sp.nonlinsolve([eq1, eq2], (x, y))  # {(-sqrt(3), 1), (sqrt(3), 1)}