Take the 2-minute tour ×
Mathematica Stack Exchange is a question and answer site for users of Mathematica. It's 100% free, no registration required.

Suppose I call

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

The output is a list

{g1,g2,...}

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
add comment

1 Answer 1

up vote 7 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.

Timing[
 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]= \
{(26865976210184208452733700652828855812422384556246644691932501381503\
562817680 - 
    243502922707328415287593805560731167473204552630142461410610182847\
7051371070 z + 
    159758899358659297213970169948368802291120932841779568680462060819\
8342054959 z^2 + 
    117356001085553879314729354875822466004292087013976143694746220636\
08549556104 z^3 + 
    670871729437581239452745061221877350353798793983114023985403960308\
9597922596 z^4 + 
    742733530743532277159318817234115610566358359729018365599178560074\
149841571 z^5 - 
    123017424636603617320966572335457938227737349248956271019315675654\
817148075 z^6 - 
    120597839923722484422028319621260872787188437259504489268758105960\
490943543 z^7 - 
    589550060248794720654074609791788306633207078515514201007961400753\
44770617 z^8 - 
    959376629620096206267937411987608577860579884873406028793609896234\
3719923 z^9 - 
    161491469959962690666417014268063263295810695614595035192399568987\
4377976 z^10 + 
    281126429639293832101523727394804818571984663246643057444386184104\
014888 z^11 - 
    842500954350297074203419395874006533554497667367625627509322289419\
9144 z^12)/
  94053848810936873074377725665691572019272504902971426379079192228628\
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: http://forums.wolfram.com/mathgroup/archive/2011/Mar/msg00362.html

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
add comment

Your Answer

 
discard

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.