|
A.1.7 Cyclic roots
We write a procedure returning a string that enables us to create
automatically the ideal of cyclic roots over the basering with n
variables. The procedure assumes that the variables consist of a single
letter each (hence no indexed variables are allowed; the procedure
cyclic in poly.lib does not have this restriction). Then
we compute a standard basis of this ideal and some numerical
information. (This ideal is used as a classical benchmark for standard
basis computations).
| // We call the procedure 'cyclic':
proc cyclic (int n)
{
string vs = varstr(basering)+varstr(basering);
int c=find(vs,",");
while ( c!=0 )
{
vs=vs[1,c-1]+vs[c+1,size(vs)];
c=find(vs,",");
}
string t,s;
int i,j;
for ( j=1; j<=n-1; j=j+1 )
{
t="";
for ( i=1; i <=n; i=i+1 )
{
t = t + vs[i,j] + "+";
}
t = t[1,size(t)-1] + ","+newline;
s=s+t;
}
s=s+vs[1,n]+"-1";
return (s);
}
ring r=0,(a,b,c,d,e),lp; // basering, char 0, lex ordering
string sc=cyclic(nvars(basering));
sc; // the string of the ideal
==> a+b+c+d+e,
==> ab+bc+cd+de+ea,
==> abc+bcd+cde+dea+eab,
==> abcd+bcde+cdea+deab+eabc,
==> abcde-1
execute("ideal i="+sc+";"); // this defines the ideal of cyclic roots
i;
==> i[1]=a+b+c+d+e
==> i[2]=ab+bc+cd+ae+de
==> i[3]=abc+bcd+abe+ade+cde
==> i[4]=abcd+abce+abde+acde+bcde
==> i[5]=abcde-1
timer=1;
ideal j=std(i);
==> //used time: 7.5 sec
size(j); // number of elements in the std basis
==> 11
degree(j);
==> // codimension = 5
==> // dimension = 0
==> // degree = 70
|
|