############################################################################################# ############################################################################################# #b_ij(c) BERECHNEN ############################################################################################# ############################################################################################# #Grenze, bis zu der die Eintraege der Streumatrix berechnet werden sollen #Eingabe im Hauptprogramm #Grenze:=20;; ############################################################################################# #EINTRAEGE DER STREUMATRIX BERECHNEN BIS ZU DEM VORGEGEBENEN WERT ############################################################################################# #Bereitstellung der benoetigten Variablen b:=List([1..AnzahlSpitzen]); for i in [1..AnzahlSpitzen] do b[i]:=List([1..AnzahlSpitzen]); for k in [1..AnzahlSpitzen] do b[i][k]:=List([1..Grenze],i ->0); od; od; TT:=Matrixdarstellung(T);; ################################################# #Schleife ueber c ################################################# for c in [1..Grenze] do ################################################# #Liste der Woerter ueber c W_c:=List([1..Phi(c)], i->0);; i:=1; for a in [1..c] do if GcdInt(a,c)=1 then #Bestimmung von W_c[i]:=X(a,c) Euklid_d:=GcdRepresentation(Integers,a,c) mod c;; d:=Euklid_d[1];; bb:=(a*d-1)/c;; W_c[i]:=[[a,bb],[c,d]];; i:=i+1;; fi; od; ################################################# #Schleife ueber Spitzenanzahl ################################################# for zeile in [1..AnzahlSpitzen] do for spalte in [zeile..AnzahlSpitzen] do ################################################# #Eintrag b[zeile,spalte] bestimmen ################################################# #Zuerst Liste aller Woerter von rechts und von links multipliziert mit #Potenzen von T bis zur jeweiligen Spitzenbreite N_ij:=List([1..Phi(c)*Spitzenbreiten[zeile]*Spitzenbreiten[spalte]], i->0);; j:=1; for i in [1..Phi(c)] do for n in [1..Spitzenbreiten[zeile]] do for m in [1..Spitzenbreiten[spalte]] do N_ij[j]:=TT^n*W_c[i]*TT^m; j:=j+1; od; od; od; #doppelte Matrizen streichen for i in [1..Phi(c)*Spitzenbreiten[zeile]*Spitzenbreiten[spalte]] do for k in [i+1..Phi(c)*Spitzenbreiten[zeile]*Spitzenbreiten[spalte]] do if (N_ij[i]=N_ij[k])=true then N_ij[k]:=0; fi; od; od; #Neue Liste aller Woerter mit Potenzen von T multipliziert ohne doppelte Eintraege Doppelte:=0; for i in [1..Phi(c)*Spitzenbreiten[zeile]*Spitzenbreiten[spalte]] do if N_ij[i]=0 then Doppelte:=Doppelte+1; fi; od; N_Neu:=List([1..(Phi(c)*Spitzenbreiten[zeile]*Spitzenbreiten[spalte]-Doppelte)], i->0);; k:=1;; for i in [1..Phi(c)*Spitzenbreiten[zeile]*Spitzenbreiten[spalte]] do if (N_ij[i]=0)=false then N_Neu[k]:=N_ij[i]; k:=k+1; fi; od; #Zaehlen: fuer jedes Wort A aus N_1_Neu ueberpruefen, ob #g_1*A*g_spalte^-1 in der Untergruppe liegt N_Boolean:=List([1..(Phi(c)*Spitzenbreiten[zeile]*Spitzenbreiten[spalte]-Doppelte)], i->0);; for i in [1..(Phi(c)*Spitzenbreiten[zeile]*Spitzenbreiten[spalte]-Doppelte)] do help:=glistematrix[zeile]*N_Neu[i]*glistematrix[spalte]^-1; if Wortdarstellung(help) in Gruppe then N_Boolean[i]:=1; fi; od; #Aufsummieren help:=0;; for i in [1..(Phi(c)*Spitzenbreiten[zeile]*Spitzenbreiten[spalte]-Doppelte)] do help:= help + N_Boolean[i]; od; b[zeile][spalte][c]:=help; ################################################# #Ende Schleife ueber Spitzenanzahl spalte und zeile od; od; ################################################# #Ende Schleife ueber c od; ############################################################################################# #ENDE EINTRAGE DER STREUMATRIX BERECHNEN #############################################################################################