|Bill Allombert on Fri, 19 Dec 2008 17:27:59 +0100|
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
|Re: Functions elllderiv and ellanalyticrank|
On Thu, Dec 18, 2008 at 11:04:17AM +0100, Xavier-François Roblot wrote: > Dear PARI-developers, > > I have committed to the SVN version of PARI/GP two new functions called > elllderiv and ellanalyticrank. These functions have been implemented by > Christophe Delaunay and myself after a script of Tom Womack and John > Cremona and using results from Henri Cohen's book GTM 239. As you might > have guessed by now the first function computes the derivatives at s=1 > of the L-function of an elliptic curve, and the second one uses this > computation to compute the analytic rank of an elliptic curve. > > gp > e = ellinit("11a1"); > gp > ellanalyticrank(e) > %2 = [0, 0.2538418608559106843377589233] > gp > e = ellinit("37a1"); > gp > ellanalyticrank(e) > %4 = [1, 0.3059997738340523018204836835] > gp > e = ellinit("389a1"); > gp > ellanalyticrank(e) > %6 = [2, 1.518633000576853540460385214] > gp > e = ellinit("5077a1"); > gp > ellanalyticrank(e) > %8 = [3, 10.39109940071580413875185035] > > Please try them out and let me know if you find any bugs and/or > inefficiencies. Hello Xavier, This is a very nice patch. Here my comments: 1) For all the curves in Cremona databases it returns the same as the geometric rank (for conductor <120000). This is very good (for your patch, for Cremona database and for Birch and Swinnerton-Dyer conjecture :)) 2) I think elllderiv should be renamed ellL1 for consistency with bnrL1 (and maybe add a flag so that both functions have the same semantic). 3) The fields of ELLLD should be documented. 4) The function number_of_terms() take an argument 'prec' which is not used, but use DEFAULTPREC intensively. 5) Instead of gzeta(stoi(i), prec), you can use szeta(i, prec). 6) Error messages like pari_err(talker, "M is smaller than 2x\n") and pari_err(talker, "M1 is not valid upper bound\n"); are meaningless. Please change them to someting meaningful. (If they are internal error change "talker" to "bugparier"). 7) Please document what is VSX in #define VSX 5. (Or better remove VSX. One day someone will create a CPU called VSX and gcc with define VSX. It already appened with k6 and sgi.) 8) you can use powuu isntead of gpowgs(stoi(n), r) if n and r are >0 9) compute_Gr_Sx call timer2 but not msgtimer 10) Use gerepilecopy instead of gerepileupto(av,gcopy()) 11) instead rep = cgetg(3, t_VEC); gel(rep, 1) = gcopy(stoi(rk)); gel(rep, 2) = gcopy(Lr1); return gerepileupto(av, rep); It is better to do return gerepilecopy(av, mkvec2(stoi(rk),Lr1)); 12) You use vs = fetch_user_var("s"); This is not great because this breaks the user space interface by creating varibale with unexpected priority. Cheers, Bill.