MathGroup Archive 2000

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: What happened to MonomialList?

  • To: mathgroup at
  • Subject: [mg24796] Re: What happened to MonomialList?
  • From: Daniel Lichtblau <danl at>
  • Date: Thu, 10 Aug 2000 00:33:07 -0400 (EDT)
  • References: <>
  • Sender: owner-wri-mathgroup at

Andrzej Kozlowski wrote:
> Recently, I have been doing quite a lot of computations using GroebnerBasis.
> The last time I used it so extensively was with version 3, and I have been
> having a strange feeling that things used to be easier then. Particularly I
> was not very happy that I have had to program a number of basic functions
> myself from scratch, e.g. a LeadingTerm (with respect to a given
> MonomialOrder) function. Then I looked at my old notebooks and realized
> something really strange. The MonomialList function has disappeared and
> nothing seems to have been provided in its place. What is more weird is that
> MonomialList still appears in the Documentation for GroebnerBasis:
> MonomialList[ poly, {x1, ..., xn}] gives a list of the monomials in poly in
> the order used by  GroebnerBasis. MonomialList takes the same options as
> GroebnerBasis.
> But unlike Mathematica 3.0, 4.0 knowsn nothing about MonomialList:
> In[1]:=
> ?MonomialList
> >From In[1]:=
> Information::"notfound": "Symbol \!\(\"MonomialList\"\) not found."
> Any explanation?
> --
> Andrzej Kozlowski
> Toyama International University, JAPAN
> For Mathematica related links and resources try:
> <>

Last things first. The fact that MonomialList is gone but appears in the
documentation is a known bug.

As for what replaces it...there is internal functionality that I believe
should be made visible and documented, but this is not my call. The new
functionality is more general, using a flexible representation of the
polynomial(s) as a list of exponent vector and coefficient pairs,
ordered by MonomialOrder on the exponent vectors.

The function I refer to is Internal`DistributedTermsList. I've had cause
to use it twice in this forum, see e.g.

Below is something of an explanation for what it does. Since it is an
internal function, this is subject to change.

We start with a simple example.

In[9]:= InputForm[dlist =
        Internal`DistributedTermsList[1/2 + 2/3 x^2 + 4/5 y^2, {x,y}]]
Out[9]//InputForm= {{{{2, 0}, 2/3}, {{0, 2}, 4/5}, {{0, 0}, 1/2}}, {x,

To get something akin to the old MonomialList result, one can now do:

In[10]:= InputForm[mlist = Internal`FromDistributedTermsList[dlist,

Out[10]//InputForm= {(2*x^2)/3, (4*y^2)/5, 1/2}

DistributedTermsList will return an ordered pair of the form

{internal distributed polynomial, ordered variables}

The ordered variables are needed in case either internal variables were
created (try it with y^(1/2) instead of y^2) or in case Sort->True was
specified. The internal polynomial consists of a list of ordered pairs
of the form

{exponent vector, coefficient}

These are ordered by decreasing exponent vectors, as determined by the
given monomial order (default is lexicographic).

As above we provide a function that will convert from this form back to
the input expression (possibly expanded or partially collected,
depending on what variables are specified, whether input was expanded,
etc.). There is an optional second argument to apply to the individual
terms; if unspecified we use Plus. In the example above I explicitly
List so we get a list in decreasing monomial order. Possibly this notion
should be extended so that we also might apply some function to all
factors within a given term. Another extension to this functionality
might be to output a weight matrix in DistributedTermsList in addition
to the distributed polynomial and ordered variables. Thus far I've not
really had a compelling reason to do this (might be useful if the input
was not a legitimate "polynomial" and internal variables were created
e.g. for radicals).

Daniel Lichtblau
Wolfram Research

  • Prev by Date: Re: (No Subject)
  • Next by Date: Re: Mathematica won't solve simple diff. eqn.--Correction
  • Previous by thread: What happened to MonomialList?
  • Next by thread: Creating GIFs using Display