Equazioni

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

solve()

Da discutere…

solveset()

>>> 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 compl. (coniugate)
    {-sqrt(2)*I, sqrt(2)*I}
 
>>> sp.solveset(x**3 + x**2 + x + 1)  # Tre soluzioni

Restituisce un insieme con le soluzioni dell’equazione

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

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

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

Eq()

sp.solveset(primo_membro - secondo_membro)

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

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…

roots()

>>> 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}

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

Sistemi di equazioni

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

linsolve()

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

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

La funzione risolve anche sistemi lineari espressi in notazione matriciale.

nonlinsolve()

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)}

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().