Karim Belabas on Fri, 26 Oct 2012 09:48:49 +0200 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
Re: New ellinit interface |
* Karim Belabas [2012-10-25 19:36]: > * Henri.Cohen@math.u-bordeaux1.fr [2012-10-20 22:50]: > > > > >A question: computing eta1,et2 is currently done via E_2 (and Legendre > > >relation). Even for tau in the standard fundamental domain, > > >computing E_2(tau) > > >in terms of \sum_{n>0} n q^n / (1-q^n) is expensive, in O~(prec^2), > > >assuming quasi-linear multiplication. Can one do better ? > > > > Yes, I believe so, using the Weierstrass sigma function, which is also > > a theta function: with > > q=exp(2\pi i\tau) and u=exp(2\pi i z/\om_2) we have > > > > sigma(z;L)=(\om_2/2\pi i)exp(\eta_2 z^2/(2\om_2))eta^{-3}(\tau)* > > \sum_{n\in\Z}(kronecker(-4,n)q^{n^2/8}u^{n/2} > > > > so by choosing any reasonable value of z (om_2/2 perhaps) > > it should be faster. > > Thanks for the suggestion. As I understood it, one must compute sigma(z) > for two different values of z and take the quotient, resulting in an > O~(prec^(3/2)) algorithm for \eta_2. > > I chose to implement the simpler formula E2(tau) = - theta^(3)(q) / theta^(1)(q) > [ where theta^(n)(q) denotes d/dz^n theta(q, z) | z = 0, for Jacobi sine theta > function ]. This improves both elleta() and elleisnum(,2) Btw, already the naive O~(prec^(3/2)) algorithm *does* improve things, e.g, for elleta([1,I]): Before: \p10000 -> 1,740 ms \p100000 -> 8min, 59,478 ms. \p1000000 -> stopped after 10h After: \p10000 -> 52 ms \p100000 -> 3,508 ms \p1000000 -> 1min, 59,596 ms. Cheers, K.B. -- Karim Belabas, IMB (UMR 5251) Tel: (+33) (0)5 40 00 26 17 Universite Bordeaux 1 Fax: (+33) (0)5 40 00 69 50 351, cours de la Liberation http://www.math.u-bordeaux1.fr/~belabas/ F-33405 Talence (France) http://pari.math.u-bordeaux1.fr/ [PARI/GP] `