Podem introduir un polinomi d'alguna de les dues maneres següents:
p=an*x**n+...+a1*x+a0
p=poly(expressió)
Exemple:
>>> p=poly((x-2)**5+(x+1)**3)
>>> p
Poly(x**5 - 10*x**4 + 41*x**3 - 77*x**2 + 83*x - 31, x, domain='ZZ')
>>> q=2*x**3+x-2
>>> q
2*x**3 + x - 2
Fixem-nos que poly
assigna un anell algebraic per als coeficients del polinomi de forma automàtica. Podríem forçar-ho fent:
poly(expressió, domain='ZZ')
poly(expressió, domain='QQ')
poly(expressió, domain='RR')
per l'anell dels enters, els racionals o els reals, respectivament.
Per les aplicacions amb polinomis que es solen fer en cursos de l'ESO i el Batxillerat, la millor definició és explicitant el domini.
Per tant, en el cas anterior, faríem:
>>> from sympy import *
>>> p=poly(x**5 - 10*x**4 + 41*x**3 - 77*x**2 + 83*x - 31,domain='QQ')
>>> q=poly(x**4-3*x**3+x-2,domain='QQ')
Els polinomis es poden sumar, restar o multiplicar amb els operadors habituals (+
, -
i *
, respectivament).
Exemple. Seguim amb l'anterior:
>>> suma=p+q
>>> suma
Poly(x**5 - 10*x**4 + 43*x**3 - 77*x**2 + 84*x - 33, x, domain='ZZ')
>>> resta=p-q
>>> resta
Poly(x**5 - 10*x**4 + 39*x**3 - 77*x**2 + 82*x - 29, x, domain='ZZ')
>>> producte=p*q
>>> producte
Poly(2*x**8 - 20*x**7 + 83*x**6 - 166*x**5 + 227*x**4 - 221*x**3 + 237*x**2 - 197*x + 62, x, domain='ZZ')
La divisió és una situació particular:
/
retorna una expressió racional entre el numerador i el denominador.pquo(polinomi1, polinomi2)
retorna el quocient de la divisió entre els dos polinomis que rep per argument.prem(polinomi1, polinomi2)
retorna el remanent de la divisió entre els dos polinomis que rep per argument.Exemple. Seguim amb l'anterior:
>>> fraccio=p/q
>>> fraccio
(x**5 - 10*x**4 + 41*x**3 - 77*x**2 + 83*x - 31)/(x**4 - 3*x**3 + x - 2)
>>> quocient=pquo(p,q)
>>> quocient
Poly(x - 7, x, domain='QQ')
>>> remanent=prem(p,q)
>>> remanent
Poly(20*x**3 - 78*x**2 + 92*x - 45, x, domain='QQ')
>>> p==q*quocient+remanent
True
La funcó gcd(polinomi1, polinomi2)
retorna el màxim comú divisor entre dos polinomis, mentre que la funció lcf(polinomi1, polinomi2)
fa el mateix amb el mínim comú múltiple.
Exemple.
>>> from sympy import *
>>> p=poly((x-1)**3*x,domain='QQ')
>>> p
Poly(x**4 - 3*x**3 + 3*x**2 - x, x, domain='QQ')
>>> q=Poly(x*(x-1),domain='QQ')
>>> q
Poly(x**2 - x, x, domain='QQ')
>>> gcd(p,q)
Poly(x**2 - x, x, domain='QQ')
>>> lcm(p,q)
Poly(x**4 - 3*x**3 + 3*x**2 - x, x, domain='QQ')
Ens pot ser útil factoritzar un polinomi en els seus factors irreductibles. Ho fem mitjançant la funció factor
que rep per argument un polinomi. També ens pot ser útil la funció factor_list que retorna una llista amb els factors irreductibles i el seu grau.
Exemple. Seguim amb el cas anterior:
>>> factor(p*q)
x**2*(x - 1)**4
>>> factor_list(p*q)
(1, [(Poly(x, x, domain='ZZ'), 2), (Poly(x - 1, x, domain='ZZ'), 4)])
També poden ser útil les següents funcions:
degree(polinomi)
retorna el grau del polinomi que rep per argument.expand(polinomi)
retorna l'expressió d'un polinomi com a la suma de monomis.polinomi.terms()
retorna els termes del polinomi.Exemple. Seguim amb l'anterior:
>>> expand(p*q)
Poly(x**6 - 4*x**5 + 6*x**4 - 4*x**3 + x**2, x, domain='QQ')
>>> degree(p*q)
6
>>> (p*q).terms()
[((6,), 1), ((5,), -4), ((4,), 6), ((3,), -4), ((2,), 1)]
Per trobar les arrels d'un polinomi recorrem a la funció roots(polinomi,filtre)
on:
polinomi
és el polinomi de qui volem trobar les arrels.filtre
serveix per filtrar el domini sobre el que es donen les arrels (enters, racionals, reals o complexos) essent una de les expressions:filter='Z'
filter='Q'
filter='R'
filter='C'
Exemple:
>>> from sympy import *
>>> p=(x-1)**2*(2*x+1)*(x**2-2)*(x**2+1)
>>> roots(p,filter='Z')
{1: 2}
>>> roots(p,filter='Q')
{-1/2: 1, 1: 2}
>>> roots(p,filter='R')
{-1/2: 1, 1: 2, -sqrt(2): 1, sqrt(2): 1}
>>> roots(p,filter='C')
{-1/2: 1, 1: 2, -sqrt(2): 1, sqrt(2): 1, -I: 1, I: 1}
Els polinomis poden tenir coeficients en diferents variables. Per això, la funció root
admet com a argument la variable respecte la qual cerquem les arrels. Seran doncs equivalents les següents expressions:
roots(polinomi)
roots(polinomi,x)
(si el polinomi està expressat en x
)