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