# Compute rank of elliptic curve

Is there a faster way (< 1 hour) to compute the rank of the following curve? So far, I don't know the rank yet. The code presented below is just the most recent status (the last line shown is not the last line of the actual computation done in the future).

sage: E=EllipticCurve([525,228,0,-14972955,856475^2])
sage: E.two_descent()    # alternatively: E.rank(verbose=true)
Working with minimal curve [1,-1,1,-1608154463,25555312501831] via [u,r,s,t] = [1,-23045,-262,6049313]
Basic pair: I=77191414209, J=-44158885280436546
disc=-110222528210564668480677268684800
By Lemma 5.1(b), 2-adic index = 1
One (I,J) pair
*** BSD give two (I,J) pairs
Looking for quartics with I = 77191414209, J = -44158885280436546
Looking for Type 3 quartics:
Trying positive a from 1 up to 97338 (square a first...)
(1,0,-2569108581,70882136446950,-550026568648034946)    --nontrivial...(x:y:z) = (1 : 1 : 0)
Point = [3425478110:70880423707891:8]
height = 19.3580374139982139686097624130447703630897684162794
Rank of B=im(eps) increases to 1
(1,0,-79008759,382273295436,-520192233942156)   --nontrivial...(x:y:z) = (1 : 1 : 0)
Point = [105345014:382220622925:8]
height = 16.6812813105166386389509418874147230151015412188468
Rank of B=im(eps) increases to 2
(1,0,-164229,11437514,4185020814)   --nontrivial...(x:y:z) = (1 : 1 : 0)
Point = [218974:11328023:8]
height = 11.4827447652308852790130227025168290728280040230824
Rank of B=im(eps) increases to 3
(1,0,106209,55699200,5492588544)    --nontrivial...(x:y:z) = (1 : 1 : 0)
Point = [-141610:55770001:8]
height = 10.3302332544875895056301104557603387856715464732049
Rank of B=im(eps) increases to 4
(1,-1,-154173,8834360,4449633100)   --nontrivial...(x:y:z) = (1 : 1 : 0)
Point = [1644532:69235889:64]
height = 11.7002057333692153746721973178788430852437315582425
Rank of B=im(eps) increases to 5
(1,2,-50825775,197184311888,-215166592255424)   --nontrivial...(x:y:z) = (1 : 1 : 0)
Point = [8470963:24650156726:1]
height = 12.7212304727049559592490676880048355572479951461661
Rank of B=im(eps) increases to 6
(1,2,-457587,148456132,-10941975964)    --nontrivial...--new (A) #1 (x:y:z) = (1 : 1 : 0)
Point = [76265:18576082:1]
height = 9.80847862275472614146303766858310619081781113771917
Size of A=ker(eps) increases to 2
(1,2,275793,12561872,100417216) --nontrivial...(x:y:z) = (1 : 1 : 0)
Point = [-45965:1558742:1]
height = 7.1124160555385017138543826219232258062506120422326
Rank of B=im(eps) increases to 7
(9,-6,-457587,49790436,-1232321076) --nontrivial...--equivalent to (A) #1
(36,-47,-115377,1833888,147270796)  --nontrivial...--new (A) #2 (x:y:z) = (1 : 6 : 0)
Point = [265885080:18099825973:13824]
height = 15.5988971231435288000655531265862695040572334387229
Size of A=ker(eps) increases to 3
(81,-18,-457587,16596812,-136924564)    --nontrivial...--equivalent to (A) #1
(81,90,-457551,16291760,-131443136) --nontrivial...--equivalent to (A) #1
(81,-126,-457515,16901852,-142507676)   --nontrivial...--equivalent to (A) #1
(289,390,-3583851,214362260,-3608994444)    --nontrivial...--equivalent to (A) #2
(324,-573,-115020,688119,16146846)  --nontrivial...--equivalent to (A) #2
(361,-142,224037,2394828,5996916)   --nontrivial...--new (A) #3 (x:y:z) = (1 : 19 : 0)
Point = [-256085971:39857828834:6859]
height = 15.7843641858060237367375581970740197608170491286891
Size of A=ker(eps) increases to 4
(361,-263,-314667,4008872,-5767984) --nontrivial...--equivalent to (A) #1
(529,578,21429,1954188,12621420)    --nontrivial...--equivalent to (A) #3
(625,278,-146691,262908,7452324)    --nontrivial...--equivalent to (A) #3
(1849,-3530,-40851,744300,3048516)  --nontrivial...--equivalent to (A) #2
(2916,-1719,-115020,229373,1794094) --nontrivial...--equivalent to (A) #2
(2916,2169,-114795,152552,1857744)  --nontrivial...--equivalent to (A) #2
(2916,-5607,-111357,305048,1704956) --nontrivial...--equivalent to (A) #2
(3249,-426,224037,798276,666324)    --nontrivial...--equivalent to (A) #3
(3249,3543,-313290,1126731,-230409) --nontrivial...--equivalent to (A) #1
(4761,1734,21429,651396,1402380)    --nontrivial...--equivalent to (A) #3
(5625,834,-146691,87636,828036) --nontrivial...--equivalent to (A) #3
(7569,8002,-104871,86952,751760)    --nontrivial...--equivalent to (A) #3
(9025,6510,225777,568784,344640)    --nontrivial...--equivalent to (A) #3
(9409,3714,-108447,104576,589824)   --nontrivial...--equivalent to (A) #2
(13225,-18270,30657,371696,352104)  --nontrivial...--equivalent to (A) #3
(14641,-8350,-144351,101920,306224) --nontrivial...--equivalent to (A) #1
(15625,26390,-130023,-60104,296144) --nontrivial...--equivalent to (A) #3
(16641,-10590,-40851,248100,338724) --nontrivial...--equivalent to (A) #2

edit retag close merge delete

Just as a comment after the answer was given. The only related method that worked for me in SageMath version 8.0, Release Date: 2017-07-21 was

sage: E.analytic_rank_upper_bound()
9


but this is the analytic rank, the other story. The following code failed after a second:

sage: EllipticCurve([525,228,0,-14972955,856475^2]).two_descent()
Working with minimal curve [1,-1,1,-1608154463,25555312501831] via [u,r,s,t] = [1,-23045,-262,6049313]


Then same output as above till...

Trying positive a from 1 up to 97338 (square a first...)
Attempt to round -3620508798.7546680700547065951561831884632989339287 to a long int fails, aborting!


There is a RuntimeError showing up. I don't think this is natural, thought it may be important to announce this.

( 2017-09-10 07:09:47 -0500 )edit

Sort by » oldest newest most voted

The above output shows that the rank is at least 7, but mwrank has not finished. Each increase in A gives one more independent point (as shown in the output). The size of B is a power of 2, in this case 2^2 so far indicating another 2 in the rank. It is more efficient to increase one of mwrank's parameters (-x in the command line) as that shifts more of the rank into A away from B.

Magma gives the rank as 9 rather more quickly. It uses a different method in this case, the same as that used by E.simon_two_descent() but that does not work here for some reason. The method implemented in mwrank (used by Sage by default) can get slow for elliptic curves with large coefficients since it does some searching and the bounds are large.

more

Thanks! But how do I increase an mwrank's parameter concretely? How does the executable code then look like? And does simon_two_descent() depend on the BSD conjecture or is this a "real" algebraic method, that is, if the lower bound is >0 than the elliptic curve has definitively positive rank?

( 2017-09-14 07:15:37 -0500 )edit