Help pages for those functions in the algcurves package in Maple V release 6 that are not yet in Release 5. Questions and comments are welcome, Bernard Deconinck, deconinc@amath.washington.edu Mark van Hoeij, hoeij@math.fsu.edu ======================================================================== help page for monodromy ======================================================================== algcurves[monodromy] - Compute the monodromy of an algebraic curve Calling Sequence: monodromy(f, x, y, opt) Parameters: f - an irreducible polynomial in x and y x - a variable y - a variable opt - optional arguments Description: - This procedure computes the monodromy of a Riemann surface represented as a plane algebraic curve, i.e., as a polynomial f in two variables x and y. The Riemann surface is the covering surface for y as an N-valued function of x, where N = degree(f,y) is the degree of the covering. Curves with singularities are allowed as input. - The output is a list containing the following: 1) A value x0 for {\var x} for which {\var y} takes N different values, so x0 is not a branchpoint nor a singularity. 2) A list L = [fsolve(subs(x=x0,f),y,complex)] of pre-images of x0. This list of y-values at x=x0 effectively labels the sheets of the Riemann surface at x=x0. Sheet 1 is L[1], sheet 2 is L[2], etc. 3) A list [ [b1, m1], [b2,m2] , ... ] of branchpoints b.i with their monodromy m.i. The monodromy m.i of branchpoint b.i is the permutation of L one obtains by applying analytic continuation on L following a path from x0 to b.i, going around b.i counter clockwise, and returning to x0. - The permutations m.i will be given in disjoint cycle notation. The branchpoints b.i are roots of discrim(f,y). - The order of the branchpoints is chosen in such a way that the complex numbers b1 - x0, b2 - x0, ... have increasing arguments. The point x0 is chosen on the left of the branchpoints, so all arguments will be between -Pi/2 and Pi/2. If the arguments coincide, branchpoints that are closer to x0 are considered first. The point infinity will be given last, if it is a branchpoint. - It can take some time for this procedure to finish. Give the variable infolevel[algcurves] an integer value > 1 if you want monodromy to print information about the status of the computation while it is working. - If the optional argument showpaths is given then a plot will be generated displaying the paths used for the analytic continuation. If the optional argument group is given then the output will be the monodromy group G, the permutation group generated by the m.i. This group G is the Galois group of f as a polynomial over C(x). G is a subgroup of galois(f,y), which is the Galois group of f over Q(x). Examples: > with(algcurves): > monodromy(y^3-x,x,y); [-1, [-1., .5000000000 - .8660254038 I, .5000000000 + .8660254038 I], [[0, [[1, 2, 3]]], [infinity, [[1, 3, 2]]]]] > f:=(y^4-x)^2+1; 4 2 f := (y - x) + 1 > G:=monodromy(f,x,y,group); G := permgroup(8, {[[2, 6, 7, 3]], [[1, 4, 8, 5]], [[1, 5, 8, 4], [2, 3, 7, 6]]}) # Note: G is not transitive, which means that f is reducible. > evala(AFactor(f)); 4 2 (y - x + 256 - RootOf(65537 - 512 _Z + _Z )) 4 2 (y - 256 + RootOf(65537 - 512 _Z + _Z ) - x) See Also: algcurves[genus],galois ======================================================================== help page for homology ======================================================================== algcurves[homology] - Tretkoff's algorithm for finding a canonical homology basis Calling Sequence: homology(f, x, y) Parameters: f - an irreducible polynomial in x and y x - a variable y - a variable Description: - This procedure is an implementation of an algorithm given in "Combinatorial Group Theory, Riemann Surfaces and Differential Equations", C.L. Tretkoff and M.D. Tretkoff, Contemporary Mathematics, Vol 33, 1984. - It computes a canonical basis for the homology of a Riemann surface given as a polynomial f in two variables x and y. The Riemann surface is the covering surface for y as an N-valued function of x, where N = degree(f,y) is the degree of the covering. The homology is characterized by a canonical basis of cycles on the Riemann surface, i.e., these cycles split apart in two groups, the elements of the first group are denoted a.i, the elements of the second group are denoted b.i, with i=1..g, with g the genus of the Riemann surface. These cycles have the following intersection indices: (a.i, b.i) have intersection number 1, and all others: (a.i, a.j), (b.i, b.j) and (a.i, b.j) with i<>j have intersection number 0. - The result of H:=homology(f,x,y) is a table H containing the following: 1) H[basepoint] is a value x0 for {\var x} for which {\var y} takes N different values, so x0 is not a branchpoint nor a singularity. 2) H[sheets] is a list L = [fsolve(subs(x=x0,f),y,complex)] of pre-images of x0. This list of y-values at x=x0 effectively labels the sheets of the Riemann surface at x=x0. Sheet 1 is L[1], sheet 2 is L[2], etc. 3) H[genus] gives the \xref2{genus}{algcurves,genus} of the Riemann surface, as half the dimension of the homolgy of the Riemann surface. 4) H[cycles] is a table containing a set of cycles 1..r, with r=2*g+N-1. In this set, 2*g of these cycles are linearly independent over the integers in the homology. The cycles are given as lists. The elements of the list at odd positions denote which sheet one is on, the elements at even positions denote around which branchpoint one needs to circle to get from the sheet at the previous position to the sheet at the next position. The branchpoint is given together with the permutation of the sheets around that branchpoint. The lists representing the cycles are cyclic: circling around the last branchpoint brings one back to the sheet given at position 1. 5) H[linearcombination] is a matrix with 2*g rows and r columns, giving the linear combinations of the elements in homology[cycles] which give cycles a.i or b.i, i=1..g. The cycle a.i is given by the i-th row of this matrix. The cycle b.i is given by the (g+i)-th row of this matrix. 6) H[canonicalcycles] is a table containing the explicit representation of the cycles a.i and b.i, i=1..g. These cycles are also given by cyclic lists. Again, the elements at odd positions of the list are sheetnumbers. The elements at even positions of the list are branchpoints, together with a number indicating how many times one needs to circle around the branchpoint in the counterclockwise direction. If this number is negative, one needs to circle around to the branchpoint as many times in the clockwise direction. Examples: > with(algcurves): > homology(y^3-x^2-1,x,y); table([ basepoint = -.5000000000 - 1.000000000 I [1 0 0 0] linearcombination = [ ] [0 1 0 0] sheets = [-.8307064235 + .5747526541 I, -.08239718756 - 1.006789193 I, .9131036111 + .4320365388 I] cycles = table([ 1 = [1, [-1.000000000 I, [1, 2, 3]], 2, [1. I, [1, 2, 3]]] 2 = [1, [-1.000000000 I, [1, 2, 3]], 3, [1. I, [1, 2, 3]]] 3 = [1, [-1.000000000 I, [1, 2, 3]], 2, [infinity, [1, 2, 3]]] 4 = [1, [-1.000000000 I, [1, 2, 3]], 3, [infinity, [1, 2, 3]]] ]) canonicalcycles = table([ a = [[1, [-1.000000000 I, 1], 2, [1. I, -1]]] b = [[1, [-1.000000000 I, -1], 3, [1. I, 1]]] ]) genus = 1 ]) See Also: algcurves[differentials],algcurves[monodromy] ======================================================================== help page for differentials ======================================================================== algcurves[differentials] - Holomorphic differentials of an algebraic curve Calling Sequence: differentials(f, x, y, opt) Parameters: f - an irreducible polynomial in x and y x - a variable y - a variable opt - optional argument to change the form of the output Description: - This procedure computes a basis of the holomorphic differentials of an irreducible algebraic curve f. Every holomorphic differential is of the form p(x,y)/diff(f,y) * dx where p(x,y) is a polynomial in x and y. - If f is irreducible, which can be verified by evala(AFactor(f)), then the dimension of the holomorphic differentials equals the genus of the curve, in other words nops(differentials(f,x,y)) = genus(f,x,y). - If f has no singularities then p(x,y) can be any polynomial in x,y of degree <= d-3 where d=degree(f,{x,y}). In this case the genus equals the number of monomials of degree <= d-3, which is (d-1)(d-2)/2. - For a singular curve, each singularity poses delta (the delta-invariant) independent linear conditions on the coefficients of p(x,y). So the genus equals (d-1)(d-2)/2 minus the sum of the delta-invariants. If the delta = m(m-1)/2 where m is the multiplicity of the singularity then the linear conditions are equivalent with p(x,y) vanishing with multiplicity m-1 at that singularity. If delta > m(m-1)/2 then there are additional linear conditions, which are computed using integral_basis. - The output of this procedure will be a basis for all p(x,y)/diff(f,y) * dx, or a basis for all p(x,y) in case a 4'th argument skip_dx is given. Examples: > with(algcurves): > f:=y^4+x^3*y^3+x^4; 4 3 3 4 f := y + x y + x > differentials(f,x,y); 2 x dx x dx [--------------, ----------] 3 3 y (4 y + 3 x ) 4 y + 3 x > differentials(f,x,y,skip_dx); 2 2 [x y, x y ] > nops(%); 2 > genus(f,x,y); 2 See Also: algcurves[genus],algcurves[singularities] ======================================================================== help page for periodmatrix ======================================================================== The code computes the holomorphic differentials. It determines the monodromy by analytic continuation (using Maple's fsolve). Then a canonical homology basis is computed by Tretkoff's algorithm. And finally the differentials are integrated over the paths of this basis. This integration is the most time consuming part, because although Maple is fast on symbolic computations, it is in general slow on numerical work. periodmatrix(F,x,y) computes a period matrix, a g by 2g matrix. The differentials that were used can be displayed, and so can the homology basis (there's a seperate command for that). periodmatrix(F,x,y,normalized) computes A^(-1) * B where [A B] is the period matrix. Example: > periodmatrix( y^4+x^4+1 ,x,y,normalized); # takes about 1/2 minute on my laptop. [1.000000002 + .9999999988 I , -.5000000027 - .4999999978 I , -.4999999987 + .4999999984 I] [-.499999999 - .4999999989 I , .2499999981 + 1.249999998 I , -.2499999984 - .7499999999 I] [-.5000000009 + .4999999981 I , -.2499999979 - .7499999971 I , -.2500000023 + .7499999990 I] # This result is about 8 digits accurate (one can see that because the matrix # must be symmetric). It is possible to compute more digits by setting the # variable Digits to a higher value. > evalf(%,6); # round to 6 digits [1.00000 + 1.00000 I -.500000 - .500000 I -.500000 + .500000 I] [ ] [-.500000 - .500000 I .250000 + 1.25000 I -.250000 - .750000 I] [ ] [-.500000 + .500000 I -.250000 - .750000 I -.250000 + .750000 I] > map(convert,%,rational); # coefficients happen to be in Q[I] in this example. [ 1 + I -1/2 - 1/2 I -1/2 + 1/2 I] [ ] [-1/2 - 1/2 I 1/4 + 5/4 I -1/4 - 3/4 I] [ ] [-1/2 + 1/2 I -1/4 - 3/4 I -1/4 + 3/4 I] ======================================================================== help page for is_hyperelliptic ======================================================================== algcurves[is_hyperelliptic] - Test if an algebraic curve is hyperelliptic Calling Sequence: is_hyperelliptic(f, x, y) Parameters: f - an irreducible polynomial in x and y x - a variable y - a variable Description: - An irreducible algebraic curve f(x,y) is called rational if the genus is 0. In this case a parametrization can be computed. It is called elliptic if the genus is 1. It is called hyperelliptic if the genus is more than 1 and f(x,y) is birational to a curve F(X,Y) with degree(F,Y)=2. In the elliptic or hyperelliptic case a normal form can be computed with Weierstrassform. - If the genus is less than 2, then the curve is not hyperelliptic and the output will be: false. If the genus is 2, then the output will be: true. For higher genus, the output can be true or false. Examples: > with(algcurves): > f:=y^6+(1+x^2)*y^4+(-4*x-2)*y^3-2*y^2*x^3-2*y*x^3+x*(x^5+4*x+4): > g:=y^7+x^8+x^2*y^3: > h:=y^8+(x^2-x)^4+(x^2-x)^2*y^3: > is_hyperelliptic(f,x,y); true > is_hyperelliptic(g,x,y); false > is_hyperelliptic(h,x,y); true > Weierstrassform(h,x,y,x0,y0); 2 7 2 3 4 6 5 [y0 - 1 + 8 x0 + 4 x0 - 28 x0 + 56 x0 - 72 x0 - 28 x0 + 60 x0 , (x - 1) x 6 5 6 5 4 3 4 2 -----------, - (-6 y + y + 12 y x - 2 y x - 4 x y + 4 y x + 12 y x 2 2 y - x + x 2 3 4 3 3 3 3 4 5 6 7 / - 12 x y - 8 y x + 8 y x + 4 x - 20 x + 36 x - 28 x + 8 x ) / ( / 4 3 2 2 5 2 x0 - 4 x0 + 6 x0 - 4 x0 + 1 + y0 (4 y + 1 + 4 y) y ), 1/2 -------------------------------------, 2 3 4 1 - 4 x0 + 6 x0 - 4 x0 + 2 x0 3 5 2 6 4 8 7 -12 x0 - 40 x0 + 2 x0 + 32 x0 + 30 x0 + 4 x0 - 16 x0 - 1/2 ----------------------------------------------------------------------] 7 8 2 3 4 6 5 1 - 8 x0 - 16 x0 + 4 x0 + 28 x0 - 56 x0 + 72 x0 + 40 x0 - 64 x0 See Also: algcurves[genus],algcurves[Weierstrassform], algcurves[parametrization]