lmonomial -- the leading
monomial of a polynomial
Introductionlmonomial(p) returns the leading monomial
of the polynomial p.
Call(s)lmonomial(p <, vars> <, order> <, Rem>)
Parametersp |
- | a polynomial of type
DOM_POLY or a polynomial expression |
vars |
- | a list of indeterminates of the polynomial: typically, identifiers or indexed identifiers |
order |
- | the term ordering: either LexOrder
or DegreeOrder or DegInvLexOrder or a user-defined term ordering
of type Dom::MonomOrdering. The default
is the lexicographical ordering LexOrder. |
OptionsRem |
- | makes lmonomial return a list with the
leading monomial and the ``reductum''. |
Returnsa polynomial of the same type as p. An expression is
returned if p is an expression. FAIL is returned if the input cannot be
converted to a polynomial. With Rem, a list of
two polynomials is returned.
p
Related
Functionscoeff, degree, degreevec, ground, lcoeff, ldegree, lterm, nterms, nthcoeff, nthmonomial, nthterm, poly, poly2list, tcoeff
Detailsp can either be a polynomial expression,
or a polynomial generated by poly, or an element of some polynomial
domain overloading lmonomial.p is
regarded as a polynomial in these indeterminates. Note that the
specified list does not have to coincide with the indeterminates of the
input polynomial. Cf. example 1.order. Cf. example 2.lmonomial returns FAIL if the input polynomial cannot be
converted to a polynomial in the specified indeterminates. Cf.
example 4.lmonomial is not fully evaluated. It can
be evaluated by the functions mapcoeffs and eval. Cf. example 5.
Option: Remp is p - lmonomial(p).
Example
1We demonstrate how the indeterminates influence the result:
>> p := 2*x^2*y + 3*x*y^2 + 6: lmonomial(p), lmonomial(p, [x, y]), lmonomial(p, [y, x])
2 2 2
3 x y , 2 x y, 3 x y
Note that the indeterminates passed to
lmonomial will be used, even if the polynomial provides
different indeterminates :
>> p := poly(2*x^2*y + 3*x*y^2, [x, y]): lmonomial(p), lmonomial(p, [x, y]), lmonomial(p, [y, x]), lmonomial(p, [y]), lmonomial(p, [z])
2 2
poly(2 x y, [x, y]), poly(2 x y, [x, y]),
2 2
poly(3 y x, [y, x]), poly((3 x) y , [y]),
2 2
poly(2 x y + 3 x y , [z])
>> delete p:
Example
2We demonstrate how various orderings influence the result:
>> p := poly(5*x^4 + 4*x^3*y*z^2 + 3*x^2*y^3*z + 2, [x, y, z]): lmonomial(p), lmonomial(p, DegreeOrder), lmonomial(p, DegInvLexOrder)
4 3 2
poly(5 x , [x, y, z]), poly(4 x y z , [x, y, z]),
2 3
poly(3 x y z, [x, y, z])
The following call uses the reverse lexicographical order on 3 indeterminates:
>> lmonomial(p, Dom::MonomOrdering(RevLex(3)))
2 3
poly(3 x y z, [x, y, z])
>> delete p:
Example
3We compute the reductum of a polynomial:
>> p := poly(2*x^2*y + 3*x*y^2 + 6, [x, y]): q := lmonomial(p, Rem)
2 2
[poly(2 x y, [x, y]), poly(3 x y + 6, [x, y])]
The leading monomial and the reductum add up to the
polynomial p:
>> p = q[1] + q[2]
2 2
poly(2 x y + 3 x y + 6, [x, y]) =
2 2
poly(2 x y + 3 x y + 6, [x, y])
>> delete p, q:
Example
4We define a polynomial over the integers modulo 7:
>> p := poly(3*x + 4, [x], Dom::IntegerMod(7)): lmonomial(p)
poly(3 x, [x], Dom::IntegerMod(7))
This polynomial cannot be regarded as a polynomial with
respect to another indeterminate, because the ``coefficient''
3*x cannot be interpreted as an element of the coefficient
ring Dom::IntegerMod(7):
>> lmonomial(p, [y])
FAIL
>> delete p:
Example
5We demonstrate the evaluation strategy of
lmonomial:
>> p := poly(6*x^6*y^2 + x^2 + 2, [x]): y := 4: lmonomial(p)
2 6
poly((6 y ) x , [x])
Evaluation is enforced by eval:
>> mapcoeffs(%, eval)
6
poly(96 x , [x])
>> delete p, y:
DOM_POLY as
well.lmonomial was a
kernel function.