Multivariate Polynomial Rings over Generic Rings¶
Sage implements multivariate polynomial rings through several
backends. This generic implementation uses the classes PolyDict
and ETuple
to construct a dictionary with exponent tuples as keys
and coefficients as values.
AUTHORS:
David Joyner and William Stein
Kiran S. Kedlaya (2006-02-12): added Macaulay2 analogues of Singular features
Martin Albrecht (2006-04-21): reorganize class hierarchy for singular rep
Martin Albrecht (2007-04-20): reorganized class hierarchy to support Pyrex implementations
Robert Bradshaw (2007-08-15): Coercions from rings in a subset of the variables.
EXAMPLES:
We construct the Frobenius morphism on \(\GF{5}[x,y,z]\) over \(\GF{5}\):
sage: R.<x,y,z> = GF(5)[]
sage: frob = R.hom([x^5, y^5, z^5])
sage: frob(x^2 + 2*y - z^4)
-z^20 + x^10 + 2*y^5
sage: frob((x + 2*y)^3)
x^15 + x^10*y^5 + 2*x^5*y^10 - 2*y^15
sage: (x^5 + 2*y^5)^3
x^15 + x^10*y^5 + 2*x^5*y^10 - 2*y^15
We make a polynomial ring in one variable over a polynomial ring in two variables:
sage: R.<x, y> = PolynomialRing(QQ, 2)
sage: S.<t> = PowerSeriesRing(R)
sage: t*(x+y)
(x + y)*t
- class sage.rings.polynomial.multi_polynomial_ring.MPolynomialRing_macaulay2_repr¶
Bases:
object
A mixin class for polynomial rings that support conversion to Macaulay2.
- class sage.rings.polynomial.multi_polynomial_ring.MPolynomialRing_polydict(base_ring, n, names, order)¶
Bases:
sage.rings.polynomial.multi_polynomial_ring.MPolynomialRing_macaulay2_repr
,sage.rings.polynomial.polynomial_singular_interface.PolynomialRing_singular_repr
,sage.rings.polynomial.multi_polynomial_ring_base.MPolynomialRing_base
Multivariable polynomial ring.
EXAMPLES:
sage: R = PolynomialRing(Integers(12), 'x', 5); R Multivariate Polynomial Ring in x0, x1, x2, x3, x4 over Ring of integers modulo 12 sage: loads(R.dumps()) == R True
- monomial_all_divisors(t)¶
Return a list of all monomials that divide
t
, coefficients are ignored.INPUT:
t
- a monomial.
OUTPUT: a list of monomials.
EXAMPLES:
sage: from sage.rings.polynomial.multi_polynomial_ring import MPolynomialRing_polydict_domain sage: P.<x,y,z> = MPolynomialRing_polydict_domain(QQ,3, order='degrevlex') sage: P.monomial_all_divisors(x^2*z^3) [x, x^2, z, x*z, x^2*z, z^2, x*z^2, x^2*z^2, z^3, x*z^3, x^2*z^3]
ALGORITHM: addwithcarry idea by Toon Segers
- monomial_divides(a, b)¶
Return
False
ifa
does not divideb
andTrue
otherwise.INPUT:
a
– monomialb
– monomial
OUTPUT: Boolean
EXAMPLES:
sage: P.<x,y,z> = PolynomialRing(ZZ,3, order='degrevlex') sage: P.monomial_divides(x*y*z, x^3*y^2*z^4) True sage: P.monomial_divides(x^3*y^2*z^4, x*y*z) False
- monomial_lcm(f, g)¶
LCM for monomials. Coefficients are ignored.
INPUT:
f
- monomial.g
- monomial.
OUTPUT: monomial.
EXAMPLES:
sage: from sage.rings.polynomial.multi_polynomial_ring import MPolynomialRing_polydict_domain sage: P.<x,y,z> = MPolynomialRing_polydict_domain(QQ,3, order='degrevlex') sage: P.monomial_lcm(3/2*x*y, x) x*y
- monomial_pairwise_prime(h, g)¶
Return True if
h
andg
are pairwise prime.Both are treated as monomials.
INPUT:
h
- monomial.g
- monomial.
OUTPUT: Boolean.
EXAMPLES:
sage: from sage.rings.polynomial.multi_polynomial_ring import MPolynomialRing_polydict_domain sage: P.<x,y,z> = MPolynomialRing_polydict_domain(QQ,3, order='degrevlex') sage: P.monomial_pairwise_prime(x^2*z^3, y^4) True
sage: P.monomial_pairwise_prime(1/2*x^3*y^2, 3/4*y^3) False
- monomial_quotient(f, g, coeff=False)¶
Return
f/g
, where bothf
andg
are treated as monomials.Coefficients are ignored by default.
INPUT:
f
- monomial.g
- monomial.coeff
- divide coefficients as well (default: False).
OUTPUT: monomial.
EXAMPLES:
sage: from sage.rings.polynomial.multi_polynomial_ring import MPolynomialRing_polydict_domain sage: P.<x,y,z> = MPolynomialRing_polydict_domain(QQ, 3, order='degrevlex') sage: P.monomial_quotient(3/2*x*y, x) y
sage: P.monomial_quotient(3/2*x*y, 2*x, coeff=True) 3/4*y
Note
Assumes that the head term of f is a multiple of the head term of g and return the multiplicant m. If this rule is violated, funny things may happen.
- monomial_reduce(f, G)¶
Try to find a
g
inG
whereg.lm()
dividesf
.If found,
(flt,g)
is returned,(0,0)
otherwise, whereflt
isf/g.lm()
. It is assumed thatG
is iterable and contains ONLY elements in this ring.INPUT:
f
- monomialG
- list/set of mpolynomials
EXAMPLES:
sage: from sage.rings.polynomial.multi_polynomial_ring import MPolynomialRing_polydict_domain sage: P.<x,y,z>=MPolynomialRing_polydict_domain(QQ,3, order='degrevlex') sage: f = x*y^2 sage: G = [3/2*x^3 + y^2 + 1/2, 1/4*x*y + 2/7, P(1/2)] sage: P.monomial_reduce(f,G) (y, 1/4*x*y + 2/7)
sage: from sage.rings.polynomial.multi_polynomial_ring import MPolynomialRing_polydict_domain sage: P.<x,y,z> = MPolynomialRing_polydict_domain(Zmod(23432),3, order='degrevlex') sage: f = x*y^2 sage: G = [3*x^3 + y^2 + 2, 4*x*y + 7, P(2)] sage: P.monomial_reduce(f,G) (y, 4*x*y + 7)
- class sage.rings.polynomial.multi_polynomial_ring.MPolynomialRing_polydict_domain(base_ring, n, names, order)¶
Bases:
sage.rings.ring.IntegralDomain
,sage.rings.polynomial.multi_polynomial_ring.MPolynomialRing_polydict
- ideal(*gens, **kwds)¶
Create an ideal in this polynomial ring.
- is_field(proof=True)¶
- is_integral_domain(proof=True)¶