> < ^ From:

< ^ Subject:

Johannes M"uller writes :

Second: I'm in need of a function returning the (rounded) modulus of a

cyclotomic, e.g. something like AbsVal(1+E(4)) giving something about

1414/1000. Is there something I haven't found? (gap3r4p0)

to which Alexander Hulpke responds :

No. At the moment, GAP's implementation of field extensions is a purely

algebraic one. There is no way to extend valuation information from the

ground field to the extension.

It would be possible to write a function 'AbsVal' in the GAP language, that

would utilize the canonical embedding E(n)->exp(2\pi i/n) and get an

approximation of the value by numerical evaluation.

I wrote a function that takes a (real) element in Q(E(n)) and gives an

approximate rational of it. Modifying the code for nonreal elements should

be striaght forward, but I didn't need it. As Alexander commented, the code

is both crude and slow; but for what I was doing it worked reasonably well --

(my application involves generating postscipt graphics from objects calculated

in GAP, so round off errors and the like are not at all critical).

Here's what I wrote :

# Taylor series approximation for cos(r) cos:=r->Sum([0..8],i->(((-1)^i)/Factorial(2*i))*r^(2*i) ); # rationalize r; basically you express r as a sum of cosines using its # expansion in the cyclotomics, and then approximate each cosine term # with above series. Rat:=function(r) local n,cofs,i,j,twopi,res; twopi:=710/113; n:=NofCyc(r); cofs:=CoeffsCyc(r,n); res:=cofs[1]; for i in [2..n] do if cofs[i]<>0 then res:=res+2*cofs[i]*cos(twopi*(i-1)/n); j:=CoeffsCyc(E(n)^(i-1)+E(n)^-(i-1),n); cofs:=cofs-cofs[i]*j; fi; od; return Int(1000*res); end;

some examples :

gap> a1:=1+E(4); 1+E(4) gap> a2:=a1*GaloisCyc(a1,-1); # you get the absolute value using 2 gap> b0:=Rat(ER(2)); 1414 gap> b0^2; 1999396 # close enough! gap> b0:=Rat(ER(5)); 2236 gap> b0^2; 4999696

Jacob Hirbawi <JcbHrb@CERF.net>

> < [top]