Re: commutative polynomial ideals in Mathematica and Maple
- From: "Daniel Lichtblau" <danl@xxxxxxxxxxx>
- Date: 22 Jun 2005 08:48:39 -0700
Roman Pearce wrote:
> [...]
> To test whether a zero-dimensional ideal is radical the algorithm that
> you have in mind is this: compute each univariate polynomial and check
> that it is square free (Seidenburg 1974). If you happen to find that a
> lexicographic Groebner basis contains one univariate polynomial and
> linear polynomials in the other variables, then as you observed the
> ideal is maximal and you can deduce that it is also radical. However,
> in the cases of kinema and katsura-6 this doesn't happen and you will
> actually have to compute each univariate polynomial using this method.
> So you will have to do more work. Both of these ideals are radical.
Thank you for the correction.
What I did appears to be a prime ideal test for zero dimensional
ideals. This amounts to testing for maximal ideals, as you observe.
About the only advantage this offers (as a maximal ideal test) is that
there is no longer a general position requirement or reliance on a
generic linear change of coordinates in one variable.
At least what I sent was better than my earlier attempt. In that one I
mistakenly was testing that an ideal is contained in its radical. Far
simpler would have been something like f[x_]:=True...
Anyway, here is the corrected zero dimensional radical ideal test,
along the lines of the code I previously showed. The change is to
insist that all univariates be square free.
zeroDimensionalRadicalQ[polys_] := Catch[Module[
{gb, vars=Variables[polys], len, leadvecs, pureterms, dtl},
len = Length[vars];
gb = GroebnerBasis[polys, vars,
MonomialOrder->DegreeReverseLexicographic];
dtl = First[Internal`DistributedTermsList[gb, vars,
MonomialOrder->DegreeReverseLexicographic]];
leadvecs = Map[#[[1,1]]&, dtl];
pureterms = Select[leadvecs, Count[#,a_ /;a=!=0]===1&];
If [Length[pureterms]<len, Throw[False]];
checkUnivariatePolynomials[gb,vars]
]]
checkUnivariatePolynomials[basis_,vars_] := Module[
{unipolys, len=Length[vars], newgb, poly},
Do [
newvars = RotateRight[vars,j];
newgb = GroebnerBasis[basis, newvars,
Method->{"GroebnerWalk"}];
poly = First[GroebnerBasis[newgb, newvars]];
fax = Rest[FactorSquareFreeList[poly]];
If [Apply[Times,fax[[All,2]]]!=1, Throw[False]];
, {j,len}];
True
]
To see that an ideal is radical now involves finding univariates in all
variables, and this is time consuming.
polys4 = {z1^2+z2^2+z3^2-12*z1-68, z4^2+z5^2+z6^2-12*z5-68,
z7^2+z8^2+z9^2-24*z8-12*z9+100, z1*z4+z2*z5+z3*z6-6*z1-6*z5-52,
z1*z7+z2*z8+z3*z9-6*z1-12*z8-6*z9+64, z1+z3-2*z4+z5-z6+2*z7-2*z8+8,
2*z2+2*z3-z4-z5-2*z6-z7-z9+18, z1+z2+2*z3+2*z4+2*z6-2*z7+z8-z9-38,
z4*z7+z5*z8+z6*z9-6*z5-12*z8-6*z9+32};
In[6]:= Timing[zeroDimensionalRadicalQ[polys4]]
Out[6]= {166.78 Second, True}
polys7 = {2*z*t+2*u*y+2*x*v+2*w*y-v,
x^2+2*y^2+2*z^2+2*t^2+2*u^2+2*v^2+2*w^2-x,
x+2*y+2*z+2*t+2*u+2*v+2*w-1, 2*y*z+2*x*t+2*u*y+2*z*v+2*t*w-t,
2*x*y+2*y*z+2*z*t+2*t*u+2*u*v+2*v*w-y,
y^2+2*x*z+2*y*t+2*z*u+2*v*t+2*w*u-z, z^2+2*y*t+2*u*x+2*y*v+2*w*z-u};
In[8]:= Timing[zeroDimensionalRadicalQ[polys7]]
Out[8]= {251.125 Second, True}
So we now obtain correct results, but not too quickly.
> Maple 10 doesn't use this algorithm. We compute a prime decomposition
> of the radical (similar to primary decomposition, but you remove powers
> from the factors as you go). A little bookeeping allows us to
> determine what generators need to be added to the original ideal to
> make it radical. Thus we compute one lexicographic Groebner basis for
> this test. In the absence of modular methods this is significantly
> faster, because the time to compute one univariate polynomial is often
> comparable to the time for a full lexicographic Groebner basis.
Good method.
Daniel Lichtblau
Wolfram Research
.
- Follow-Ups:
- Re: commutative polynomial ideals in Mathematica and Maple
- From: Daniel Lichtblau
- Re: commutative polynomial ideals in Mathematica and Maple
- References:
- commutative polynomial ideals in Mathematica and Maple
- From: Roman Pearce
- Re: commutative polynomial ideals in Mathematica and Maple
- From: Daniel Lichtblau
- Re: commutative polynomial ideals in Mathematica and Maple
- From: Roman Pearce
- commutative polynomial ideals in Mathematica and Maple
- Prev by Date: Re: Maple's "fd" crash code, and FORTRAN in Maple
- Next by Date: Re: Maple's "fd" crash code, and FORTRAN in Maple
- Previous by thread: Re: commutative polynomial ideals in Mathematica and Maple
- Next by thread: Re: commutative polynomial ideals in Mathematica and Maple
- Index(es):
Relevant Pages
|