Univariate Polynomials over domains and fields¶
AUTHORS:
- William Stein: first version
- Martin Albrecht: Added singular coercion.
- David Harvey: split off polynomial_integer_dense_ntl.pyx (2007-09)
- Robert Bradshaw: split off polynomial_modn_dense_ntl.pyx (2007-09)
TESTS:
We test coercion in a particularly complicated situation:
sage: W.<w>=QQ['w']
sage: WZ.<z>=W['z']
sage: m = matrix(WZ,2,2,[1,z,z,z^2])
sage: a = m.charpoly()
sage: R.<x> = WZ[]
sage: R(a)
x^2 + (-z^2 - 1)*x
-
class
sage.rings.polynomial.polynomial_element_generic.
Polynomial_generic_dense_field
(parent, x=None, check=True, is_gen=False, construct=False)¶ Bases:
sage.rings.polynomial.polynomial_element.Polynomial_generic_dense
,sage.rings.polynomial.polynomial_element_generic.Polynomial_generic_field
-
class
sage.rings.polynomial.polynomial_element_generic.
Polynomial_generic_domain
(parent, is_gen=False, construct=False)¶ Bases:
sage.rings.polynomial.polynomial_element.Polynomial
,sage.structure.element.IntegralDomainElement
-
is_unit
()¶ Return True if this polynomial is a unit.
EXERCISE (Atiyah-McDonald, Ch 1): Let
be a polynomial ring in one variable. Then
is a unit if and only if
is a unit and
are nilpotent.
EXAMPLES:
sage: R.<z> = PolynomialRing(ZZ, sparse=True) sage: (2 + z^3).is_unit() False sage: f = -1 + 3*z^3; f 3*z^3 - 1 sage: f.is_unit() False sage: R(-3).is_unit() False sage: R(-1).is_unit() True sage: R(0).is_unit() False
-
-
class
sage.rings.polynomial.polynomial_element_generic.
Polynomial_generic_field
(parent, is_gen=False, construct=False)¶ Bases:
sage.rings.polynomial.polynomial_singular_interface.Polynomial_singular_repr
,sage.rings.polynomial.polynomial_element_generic.Polynomial_generic_domain
,sage.structure.element.EuclideanDomainElement
-
quo_rem
(other)¶ - Returns a tuple (quotient, remainder) where
- self = quotient*other + remainder.
EXAMPLES:
sage: R.<y> = PolynomialRing(QQ) sage: K.<t> = NumberField(y^2 - 2) sage: P.<x> = PolynomialRing(K) sage: x.quo_rem(K(1)) (x, 0) sage: x.xgcd(K(1)) (1, 0, 1)
-
-
class
sage.rings.polynomial.polynomial_element_generic.
Polynomial_generic_sparse
(parent, x=None, check=True, is_gen=False, construct=False)¶ Bases:
sage.rings.polynomial.polynomial_element.Polynomial
A generic sparse polynomial.
EXAMPLES:
sage: R.<x> = PolynomialRing(PolynomialRing(QQ, 'y'), sparse=True) sage: f = x^3 - x + 17 sage: type(f) <class 'sage.rings.polynomial.polynomial_element_generic.Polynomial_generic_sparse'> sage: loads(f.dumps()) == f True
A more extensive example:
sage: A.<T> = PolynomialRing(Integers(5),sparse=True) ; f = T^2+1 ; B = A.quo(f) sage: C.<s> = PolynomialRing(B) sage: C Univariate Polynomial Ring in s over Univariate Quotient Polynomial Ring in Tbar over Ring of integers modulo 5 with modulus T^2 + 1 sage: s + T s + Tbar sage: (s + T)**2 s^2 + 2*Tbar*s + 4
-
coefficients
(sparse=True)¶ Return the coefficients of the monomials appearing in self.
EXAMPLES:
sage: R.<w> = PolynomialRing(Integers(8), sparse=True) sage: f = 5 + w^1997 - w^10000; f 7*w^10000 + w^1997 + 5 sage: f.coefficients() [5, 1, 7]
-
degree
(gen=None)¶ Return the degree of this sparse polynomial.
EXAMPLES:
sage: R.<z> = PolynomialRing(ZZ, sparse=True) sage: f = 13*z^50000 + 15*z^2 + 17*z sage: f.degree() 50000
-
dict
()¶ Return a new copy of the dict of the underlying elements of self.
EXAMPLES:
sage: R.<w> = PolynomialRing(Integers(8), sparse=True) sage: f = 5 + w^1997 - w^10000; f 7*w^10000 + w^1997 + 5 sage: d = f.dict(); d {0: 5, 1997: 1, 10000: 7} sage: d[0] = 10 sage: f.dict() {0: 5, 1997: 1, 10000: 7}
-
exponents
()¶ Return the exponents of the monomials appearing in self.
EXAMPLES:
sage: R.<w> = PolynomialRing(Integers(8), sparse=True) sage: f = 5 + w^1997 - w^10000; f 7*w^10000 + w^1997 + 5 sage: f.exponents() [0, 1997, 10000]
-
list
()¶ Return a new copy of the list of the underlying elements of self.
EXAMPLES:
sage: R.<z> = PolynomialRing(Integers(100), sparse=True) sage: f = 13*z^5 + 15*z^2 + 17*z sage: f.list() [0, 17, 15, 0, 0, 13]
-
quo_rem
(other)¶ Returns the quotient and remainder of the Euclidean division of
self
andother
.Raises ZerodivisionError if
other
is zero. Raises ArithmeticError ifother
has a nonunit leading coefficient.EXAMPLES:
sage: P.<x> = PolynomialRing(ZZ,sparse=True) sage: R.<y> = PolynomialRing(P,sparse=True) sage: f = R.random_element(10) sage: g = y^5+R.random_element(4) sage: q,r = f.quo_rem(g) sage: f == q*g + r and r.degree() < g.degree() True sage: g = x*y^5 sage: f.quo_rem(g) Traceback (most recent call last): ... ArithmeticError: Nonunit leading coefficient sage: g = 0 sage: f.quo_rem(g) Traceback (most recent call last): ... ZeroDivisionError: Division by zero polynomial
TESTS:
sage: P.<x> = PolynomialRing(ZZ,sparse=True) sage: f = x^10-4*x^6-5 sage: g = 17*x^22+x^15-3*x^5+1 sage: q,r = g.quo_rem(f) sage: g == f*q + r and r.degree() < f.degree() True sage: zero = P(0) sage: zero.quo_rem(f) (0, 0) sage: Q.<y> = IntegerModRing(14)[] sage: f = y^10-4*y^6-5 sage: g = 17*y^22+y^15-3*y^5+1 sage: q,r = g.quo_rem(f) sage: g == f*q + r and r.degree() < f.degree() True sage: f += 2*y^10 # 3 is invertible mod 14 sage: q,r = g.quo_rem(f) sage: g == f*q + r and r.degree() < f.degree() True
AUTHORS:
- Bruno Grenet (2014-07-09)
-
shift
(n)¶ Returns this polynomial multiplied by the power
. If
is negative, terms below
will be discarded. Does not change this polynomial.
EXAMPLES:
sage: R.<x> = PolynomialRing(ZZ, sparse=True) sage: p = x^100000 + 2*x + 4 sage: type(p) <class 'sage.rings.polynomial.polynomial_element_generic.Polynomial_generic_sparse'> sage: p.shift(0) x^100000 + 2*x + 4 sage: p.shift(-1) x^99999 + 2 sage: p.shift(-100002) 0 sage: p.shift(2) x^100002 + 2*x^3 + 4*x^2
AUTHOR: - David Harvey (2006-08-06)
-
valuation
()¶ EXAMPLES:
sage: R.<w> = PolynomialRing(GF(9,'a'), sparse=True) sage: f = w^1997 - w^10000 sage: f.valuation() 1997 sage: R(19).valuation() 0 sage: R(0).valuation() +Infinity
-
-
class
sage.rings.polynomial.polynomial_element_generic.
Polynomial_generic_sparse_field
(parent, x=None, check=True, is_gen=False, construct=False)¶ Bases:
sage.rings.polynomial.polynomial_element_generic.Polynomial_generic_sparse
,sage.rings.polynomial.polynomial_element_generic.Polynomial_generic_field
EXAMPLES:
sage: R.<x> = PolynomialRing(Frac(RR['t']), sparse=True) sage: f = x^3 - x + 17 sage: type(f) <class 'sage.rings.polynomial.polynomial_element_generic.Polynomial_generic_sparse_field'> sage: loads(f.dumps()) == f True