6.  Bibliography / Appendix::

 

 Bibliography:

[APO]              Apostol, Tom M., Modular Functions and Dirichlet Series in Number Theory 2nd Ed. Springer-Verlag; London, New York, 1990. Chapters 1-3.

 

[GGT]             Gordon, D; Grenier, D; Terras, A., “Hecke Operators and the Fundamental Domain for .” Mathematics of Computation Vol. 48, 1987, Pages 159-178.

 

[GRE]             Grenier, D., Fundamental Domains for , Ph.D. Thesis, Univ. of California at San Diego, June, 1986.

 

[MAA]            Maass, H., “Siegal’s Modular Forms and Dirichlet Series.” Lecture Notes in Math., vol. 216, Springer-Verlag, Berlin and New York, 1971.

 

 

Appendix:

 

A1. 

 

*The output to the program is a list of powers of T.  Applying them left to right on z and S between each T will result in the final output,  contained in the F2*

 

 z := 5.875 + 0.00002*I:

 Digits := 20:

 z := simplify(evalc(z)):

 A := array(1..50):

 A[1] := -round(Re(z)):

 z := z +A[1]:

 m := 2:

 while abs(evalf(z)) < 1 do

   z := simplify(evalc(-1/z)):

   A[m] := -evalc(Re(round(evalc(z)))):

   z := z +A[m]:

   m := m+1:

 od:

 for q from 1 to m do

   print(A[q]);

 od:

 print(z);

 

*End of Algorithm*

 

A2. 

 

*The output of this program is a list of each steps matrix Y, the final Y is contained in the fundamental region F3*

 

*We begin by defining all matrices needed for the algorithm*

 

 restart;

 with(linalg):

 S := matrix((2,2,[0,1,-1,0])):

 T := matrix((2,2,[1,1,0,1])):

 s[1] := matrix((3,3,[0,0,1,1,0,0,0,1,0])):

 s[2] := matrix((3,3,[0,1,0,0,0,1,1,0,0])):

 s[3] := matrix((3,3,[0,1,0,1,0,-1,-1,0,0])):

 s[4] := matrix((3,3,[1,0,0,-1,1,0,1,0,1])):

 s[5] := matrix((3,3,[1,0,0,0,0,1,0,-1,0])):

 t[1] := matrix((3,3,[1,1,0,0,1,0,0,0,1])):

 t[2] := matrix((3,3,[1,0,1,0,1,0,0,0,1])):

 t[3] := matrix((3,3,[1,0,0,0,1,1,0,0,1])):

 u[1] := matrix((3,3,[1,0,0,0,-1,0,0,0,-1])):

 Iden := array(identity, 1..3,1..3):

 s[0] := Iden:

 

*Next the equations to find each coordinate during calculations*

 

 y1 := Y[1,1]:

 y2 := Y[2,2]-(Y[1,2]^2)/Y[1,1]:

 y3 := Y[3,3]-(Y[1,3]^2/Y[1,1])-((Y[1,1]*Y[2,3]-    Y[1,2]*Y[1,3])^2/(Y[1,1]^2*Y[2,2]-[1,1]*Y[1,2]^2)):

 x1 := Y[1,2]/Y[1,1]:

 x2 := Y[1,3]/Y[1,1]:

 x3 := (Y[1,1]*Y[2,3]-Y[1,2]*Y[1,3])/(Y[1,1]*Y[2,2]-Y[1,2]^2):

 

*Here we define our matrix Y by y-temp and x-temp the canonical form*

 

 Yt := matrix((3,3,[22,0,0,0,1/11,0,0,0,1/2])):

 Xt := matrix((3,3,[1,-24/5,1/125,0,1,85/3,0,0,1])):

 print(Yt, Xt);

 Y := multiply(transpose(Xt),Yt,Xt);

 

*Now we begin the algorithm*

 

 temp1 := Iden:

 j := 0:

 print(Initial, Yis, Y);

 while not equal(Y,temp1) do

   j := j+1:

   temp1 := evalm(Y):

   te[0] := Y:

   te[1] := multiply(transpose(s[1]),Y,s[1]):

   te[2] := multiply(transpose(s[2]),Y,s[2]):

   te[3] := multiply(transpose(s[3]),Y,s[3]):

   te[4] := multiply(transpose(s[4]),Y,s[4]):

   Stemp := 10^20:

   temp := 0:

   for i from 0 to 4

     do if (te[i][1,1] <= Stemp)

       then Stemp := te[i][1,1]:

       temp := i:

     fi:

   od:

   print(Step, j,1, Vis, Se,temp):

   Y := multiply(transpose(s[temp]),Y,s[temp]):

   print(Step, j,1, Yis, Y);

   w := (y1^(1/2))*y2:

   z := x3 +(1/w)*I:

   print(Step, j,2, Zis, z);

   Digits := 20:

   z := simplify(evalc(x3+(1/w)*I)):

   A := array(1..50):

   A[1] := -round(Re(z)):

   z := z +A[1]:

   m := 2:

   while abs(evalf(z)) < 1 do

     z := simplify(evalc(-1/z)):

     A[m] := -evalc(Re(round(evalc(z)))):

     z := z +A[m]:

     m := m+1:

   od:

   for q from 1 to m do

     print(A[q]);

   od:

   print (Mis, m);

   gamma1 := Iden:

   for i from 1 to m-2 do:

     if A[i] <> 0 then

       gamma1 := multiply(evalm(t[3]^A[i]),gamma1):

     fi:

     gamma1 := multiply(s[5],gamma1):

   od:

   if A[m-1] <> 0 then

     gamma1 := multiply(evalm(t[3]^A[i]),gamma1):

   fi:

   print(Step, j,2, gamma1is, gamma1);

   Y := multiply(transpose(gamma1),Y,gamma1):

   print(Step, j,2, Yis, Y);

   p1 := floor(.5-x1):

   p2 := floor(.5-x2):

   print(step, j,3, p1is, p1, p2is, p2);

   gamma2 := Iden:

   if p1 <>0 and p2 <> 0 then

     gamma2 := multiply(evalm(t[1]^(p1)),evalm(t[2]^(p2))):

   elif p1 <> 0 then

     gamma2 := evalm(t[1]^(p1)):

   elif p2 <> 0 then

     gamma2 := evalm(t[2]^(p2)):

   fi:

   print(Step, j,3, gamma2is, gamma2);

   Y := multiply(transpose(gamma2),Y,gamma2):

   print(Step, j,3, Yis, Y);

   if x1 <0 then

    Y := multiply(transpose(u[1]),Y,u[1]):

     print(Step, j,4, Yis, Y);

   fi:

   print(End, Step, j, Yis, Y);

 od:

 print(Final, Y1is, y1, Y2is, y2, Y3is, y3, X1is, x1, X2is, x2, X3is, x3);

 

*End of Algorithm*

 

 

BACK