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]