Karim BELABAS on Wed, 14 May 2003 01:10:37 +0200 (MEST)


[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]

Re: eta values


On Thu, 1 May 2003, p g duncan wrote:
> I am using PARI/GP 2.1.3 on Solaris and am getting what appear to be
> inconsistent results for [eta_1, eta_2] from an elliptic curve.  I type
>
> ? E = ellinit([17, -57, -103, -117, -59]); E.eta
>
> %1 = [-2.807956857452822888489521845, -8.483106191227845728912379030*I]
> ? E.omega
> %2 = [0.5129665050097666315838565943, 0.4309028743584948650112829254*I]
> ? elleta(E.omega)
> %3 = [-8.965528371164577009721846459 + 0.E-27*I, 0.E-27 +
> 4.717488058710698207080157472*I]
>
> Why is elleta(E.omega) different to E.eta?  Should not both give the
> quasi periods of the Weierstrass Zeta function defined on the lattice
> for which E.omega is a basis?

The main problem is due to an unfortunate choice of normalization in the first
printings of GTM 138 (corresponds to ellinit implementation), which was fixed
in GTM 193 (corresponds to elleta). Basically, the lattice basis (w1,w2) is
chosen so that
   tau := w1 / w2 (current),
vs
   tau := w2 / w1 (old),
lives in the upper half-plane.

Unfortunately, the quasi-periods depend on the specific (ordered) lattice
basis. The two implementations conflict, because of a series of bugs in the
elliptic function code [ which assume a given orientation without checking ] :

\\ this is incorrect due to conflicting normalizations
(00:14) gp > elleta(E.omega)
%1 = [-8.965528371164577009721846459 + 0.E-27*I, 0.E-27 + 4.717488058710698207080157472*I]

\\ hopefully correct
(00:14) gp > elleta([E.omega[2], E.omega[1]])
%2 = [0.E-27 - 7.531236265034295043664443115*I, 5.615913714905645776979043690 + 0.E-27*I]

I have rewritten the elliptic function code almost from scratch in the
development version 2.2.6 [ available from CVS, I don't want to backport this ],
it now gives:

\\ above bug fixed:
(00:26) gp > elleta(E.omega)
%1 = [5.615913714905645776979043690 + 0.E-27*I, 0.E-27 + 16.96621238245569145782475806*I]

\\ as before
(00:26) gp > elleta([E.omega[2], E.omega[1]])
%2 = [0.E-27 - 7.531236265034295043664443116*I, 5.615913714905645776979043690 + 0.E-27*I]


There is one further point: E.eta gives one-half of the "standard"
quasi-periods, corresponding to the _old_ normalization :

            eta1 w2 - eta2 w1 = i Pi   (*)

( as per the user's manual, ??ellinit ), whereas GTM 193 [ e.g p 326 ] and
elleta() output have

            w1 eta2 - eta1 w2 = 2 i Pi

So, in the corrected program (GP-2.2.6), we still have

            elleta(E.omega) = - 2 * E.eta

( -1 for orientation change, and * 2 because of half periods ).

In short:

1) E.eta can be trusted, provided you're aware of the normalization (*),
2) elleta() [ and most elliptic functions ] give incorrect results in the
stable version 2.1.* whenever the basis is not oriented according to its
expectations.
3) 2. is hopefully fixed in the development version.

Hope it makes sense [ I had a hard time gathering the above ... ]

Cheers,

    Karim.
-- 
Karim Belabas                     Tel: (+33) (0)1 69 15 57 48
Dép. de Mathématiques, Bât. 425   Fax: (+33) (0)1 69 15 60 19
Université Paris-Sud              http://www.math.u-psud.fr/~belabas/
F-91405 Orsay (France)            http://www.parigp-home.de/  [PARI/GP]