Mathematica Stack Exchange is a question and answer site for users of Mathematica. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

Suppose I call

GroebnerBasis[{f1, f2, ...}, {x1,x2, ...}]

The output is a list


For each $g_j$, there should be an expression $g_j = \sum f_i h_{ij}$ for some polynomials $h_{ij}$. How do I make Mathematica output the $h$'s?

In case there is a better approach, I'll tell you my actual goal. I have polynomials $\{ f_1, f_2, \ldots, \}$ which generate an ideal $I$, and an element $q$ which I know to be invertible in the quotient ring $\mathbb{R}[x_1, x_2, \ldots]/I$. I want to generate an explicit polynomial representative for $q^{-1}$. My plan is to compute the Groebner basis of the ideal $\langle f_1, f_2, \ldots, q \rangle$, which will be $\{ 1 \}$, and find the expression $1 = \sum f_i h_i + pq$; the answer is then $p$. Calling PolynomialReduce[1,{f1, f2, ..., q}] does not have the intended effect because {f1, f2, ..., q} is not a Groebner basis.

share|improve this question
up vote 9 down vote accepted

Here is how I would go about finding the reciprocal as a member of that quotient ideal. I'll demonstrate with an example.

We start with polynomials that generate an ideal I in Q[x,y,z].

polys = {x^2 + x*y - z^3 + 3, x*y - y^2 + 2*z - 5, 
   58 x - 4*y^2*z - 3*x*z + 7};

Here is the polyniomial we wish to invert in Q/I. We will set it equal to a new variable 'q'.

qpoly = x*y*z^2 + x^2*z^2 - 3*y^2 - 4*x + 2;

We make an explicit inversion relation using a new "reciprocal" variable.

recippoly = q*qrecip - 1;

Now form a Groebner basis, eliminating 'q' but not its reciprocal.

 gb = GroebnerBasis[
    Join[polys, {q - qpoly, recippoly}], {qrecip, x, y, z}, q];]

(* Out[228]= {0.050000, Null} *)

Now filter out members that do not involve that reciprocal.

rpolys = Select[gb, ! FreeQ[#, qrecip] &];

Last we explicitly solve for the reciprocal.

qrecip /. Solve[rpolys == 0, qrecip]

(* Out[237]= \
562817680 - 
7051371070 z + 
8342054959 z^2 + 
08549556104 z^3 + 
9597922596 z^4 + 
149841571 z^5 - 
817148075 z^6 - 
490943543 z^7 - 
44770617 z^8 - 
3719923 z^9 - 
4377976 z^10 + 
014888 z^11 - 
9144 z^12)/
9247813475} *)

To respond to your original question, which may be relevant if you absolutely require expression the reciprocal in terms of the original idfeal generators, you might have a look at this post:

share|improve this answer
Nice! And I also learned about FreeQ, which I really should have learned sooner. (I was using Exponent[expr, form]!=0 , which was ugly and no doubt buggy, for this task.) – David Speyer Aug 14 '12 at 20:13

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.