Sato Tate
system:sage
{{{id=0|
reset('sqrt,pi')
var('x,a,T')
assume(T-a>0)
show( (2/pi)*integral(sqrt(1-x^2),x,a,T) )
///
\frac{{2 \cdot \left( \frac{\sin^{-1} \left( T \right) + {T \cdot \left( \sqrt{ 1 - {T}^{2} } \right)}}{2} - \frac{\sin^{-1} \left( a \right) + {a \cdot \left( \sqrt{ 1 - {a}^{2} } \right)}}{2} \right)}}{\pi}
}}}
{{{id=1|
#auto
def dist(v, b, left=-1.0r, right=1.0r):
"""
We divide the interval between left (default: 0) and
right (default: pi) up into b bins.
For each number in v (which must left and right),
we find which bin it lies in and add this to a counter.
This function then returns the bins and the number of
elements of v that lie in each one.
ALGORITHM: To find the index of the bin that a given
number x lies in, we multiply x by b/length and take the
floor.
"""
length = right - left
normalize = float(b/length)
vals = {}
d = dict([(i,0) for i in range(b)])
for x in v:
n = int(normalize*(float(x)-left))
d[n] += 1
return d, len(v)
def frequency_histogram(d, b, num=5000, left=-1.0r, right=1.0r):
s = Graphics()
left = float(left); right = float(right)
length = right - left
w = length/b
k = 0
for i, n in d.iteritems():
k += n
# ith bin has n objects in it.
s += polygon([(w*i+left,0), (w*(i+1)+left,0), \
(w*(i+1)+left, n/(num*w)), (w*i+left, n/(num*w))],\
rgbcolor=(0,0,0.5))
return s
def semicircle0():
alpha = 2.0r / float(pi)
def f(x):
return alpha * math.sqrt(1-x^2)
return plot(f, -1,1,rgbcolor=(0.5,0,0))
semicircle = semicircle0()
}}}
{{{id=2|
#auto
from math import asin, log, sqrt
def line1(xmin,xmax):
return line([(xmin,1),(xmax,1)], rgbcolor=(1,0,0))
def Xab(a,b):
bb = (asin(b)/2r + b*sqrt(1r-b^2r)/2r)
aa = (asin(a)/2r + a*sqrt(1r-a^2r)/2r)
def X(T):
return (asin(T)/2r + T*sqrt(1r-T^2r)/2r - aa)/(bb - aa)
return X
import bisect
class SatoTate:
def __init__(self, E):
self._E = E
def __repr__(self):
return "Sato-Tate data for %s"%self._E
def anlist(self, n):
return self._E.anlist(n)
def normalized_aplist(self, n):
anlist = self.anlist(n)
two = float(2)
v = [float(anlist[p])/(two*sqrt(p)) for p in prime_range(n)]
return v
def sorted_aplist(self, n):
v = self.normalized_aplist(n)
v.sort()
return v
def YCab(self, Cmax, a=-1, b=1):
v = self.sorted_aplist(Cmax)
denom = bisect.bisect_right(v, float(b)) - bisect.bisect_left(v, float(a))
try:
normalize = float(1)/denom
except:
def Y(T):
return 1.0r
return Y
start_pos = bisect.bisect_left(v, float(a))
def Y(T):
# find position that T would go in if it were inserted
# in the sorted list v.
n = bisect.bisect_right(v, float(T)) - start_pos
return n * normalize
return Y
def xyplot(self, C, a=-1, b=1):
"""
Return the quantile-quantile plot for given a,b, up to C.
"""
Y = self.YCab(C,a=a,b=b)
X = Xab(a=a,b=b)
pX = plot(X, a, b, rgbcolor=(1,0,0))
pY = plot(Y, a, b, rgbcolor=(0,0,1))
return pX + pY
def qqplot(self, C, a=-1, b=1):
"""
Return the quantile-quantile plot for given a,b, up to C.
"""
Y = self.YCab(C,a=a,b=b)
X = Xab(a=a,b=b)
pl = parametric_plot((X, Y), a,b)
ll = line([(0,0), (1.1,1.1)], rgbcolor=(1,0,0))
return pl+ll
def Delta(self, C, a, b, max_points=300, L_norm=2):
"""
Delta_{a}^{b} function:
INPUT: C - cutoff
a,b - evaluate over the interval (a,b)
max_points - number of points used in numerical integral
L_norm --the integer n=2 or n=oo.
Compute the L_n norm. For n finite this
is the integral of the difference to the power n.
For n = +oo, this is the L_oo norm, which is the max
of the absolute value of the difference (where the max
is evaluated at max_points equidistributed points).
"""
key = (C,a,b,max_points, L_norm)
try:
return self._delta[key]
except AttributeError:
self._delta = {}
except KeyError:
pass
X = Xab(a,b)
Y = self.YCab(C,a,b)
if L_norm == oo:
val = max([abs(X(T)-Y(T)) for T in srange(a,b,float(b-a)/max_points)])
print val
err = 0
else:
n = int(L_norm)
def h(T):
return (X(T) - Y(T))^n
val, err = integral_numerical(h, a, b, max_points=max_points, algorithm='qag', rule=1,eps_abs=1e-10, eps_rel=1e-10)
#self._delta[key] = (val, err)
return val, err
def theta(self, C, a=-1, b=1, max_points=300, L_norm=2):
val, err = self.Delta(C, a, b, max_points=max_points, L_norm=L_norm)
return -log(val)/log(C), val, err
def theta_interval(self, C, a=-1, b=1, max_points=300, L_norm=2):
val, err = self.Delta(C, a, b, max_points=max_points, L_norm=L_norm)
return -log(val-abs(err))/log(C), -log(val+abs(err))/log(C)
def compute_theta(self, Cmax, plot_points=30, a=-1, b=1, max_points=300, L_norm=2, verbose=False):
a,b = (float(a), float(b))
def f(C):
z = self.theta(C, a, b, max_points=max_points, L_norm=L_norm)
if verbose: print C, z
return z[0]
return [(x,f(x)) for x in range(100, Cmax, int(Cmax/plot_points))]
def compute_theta_interval(self, Cmax, plot_points=30, a=-1, b=1, max_points=300, L_norm=2, verbose=False):
a,b = (float(a), float(b))
vmin = []; vmax = []
for C in range(100, Cmax, int(Cmax/plot_points)):
zmin,zmax = self.theta_interval(C, a, b, max_points=max_points, L_norm=L_norm)
vmin.append((C, zmin))
vmax.append((C, zmax))
if verbose: print C, zmin, zmax
return vmin, vmax
def plot_theta_interval(self, Cmax, clr=(0,0,0), *args, **kwds):
vmin, vmax = self.compute_theta_interval(Cmax, *args, **kwds)
v = self.compute_theta(Cmax, *args, **kwds)
grey = (0.7,0.7,0.7)
return line(vmin,rgbcolor=grey)+line(vmax,rgbcolor=grey) + point(v,rgbcolor=clr) + line(v,rgbcolor=clr) + line1(0, Cmax)
def histogram(self, Cmax, num_bins):
v = self.normalized_aplist(Cmax)
d, total_number_of_points = dist(v, num_bins)
return frequency_histogram(d, num_bins, total_number_of_points) + semicircle
def x_times_Delta(self, x):
return x*self.Delta(x, -1,1, max_points=500)[0]
}}}
{{{id=3|
S0 = SatoTate(EllipticCurve('11a'))
S1 = SatoTate(EllipticCurve('37a'))
S2 = SatoTate(EllipticCurve('389a'))
S3 = SatoTate(EllipticCurve('5077a'))
S4 = SatoTate(EllipticCurve([1,-1,0,-79,289]))
S5 = SatoTate(EllipticCurve([0, 0, 1, -79, 342]))
S6 = SatoTate(EllipticCurve([1, 1, 0, -2582, 48720]))
S7 = SatoTate(EllipticCurve([0, 0, 0, -10012, 346900]))
S8 = SatoTate(EllipticCurve([0, 0, 1, -23737, 960366]))
S28 = SatoTate(EllipticCurve([1,-1,1,-20067762415575526585033208209338542750930230312178956502,34481611795030556467032985690390720374855944359319180361266008296291939448732243429 ]))
S = [S0,S1,S2,S3,S4,S5,S6,S7,S8]
CM = SatoTate(EllipticCurve('32a'))
Equest = SatoTate(EllipticCurve('72a1')) # non-CM but doesn't satisfy hypo of Taylor's theorem
# Our curves S satisfy Taylor's theorem
[min([e for p,e in X._E.conductor().factor()]) for X in S]
///
[1, 1, 1, 1, 1, 1, 1, 1, 1]
}}}
{{{id=4|
v = [S28.histogram(10^n,10*n) for n in range(1,7)]
G = graphics_array(v,3,2)
G.show(xmin=-1,ymin=0)
}}}
{{{id=5|
v = [S28.qqplot(10^n) for n in range(2,7)]
G = graphics_array(v,2,3)
G.show(xmin=0,ymin=0)
}}}
{{{id=6|
v = [S28.plot_theta_interval(n,plot_points=15,max_points=50) for n in [10^3,10^4,10^5,10^6,2*10^6,3*10^6]]
show(graphics_array(v,2,3),ymin=0)
}}}
{{{id=7|
S28.plot_theta_interval(3*10^6,plot_points=15,max_points=50).show(dpi=200)
}}}
{{{id=8|
S[0].plot_theta_interval(3*10^6,plot_points=15,max_points=50).show(dpi=200)
}}}
{{{id=9|
# 72a1 is the first curve to not satisfy Taylor's theorem
for E in cremona_optimal_curves(range(1,100)):
if not E.has_cm() and min([e for p,e in E.conductor().factor()]) > 1:
print E.cremona_label()
break
///
72a1
}}}
{{{id=10|
v = [S[i].histogram(10^3,20) for i in range(9)]
G = graphics_array(v,3,3)
G.show(xmin=-1,ymin=0)
}}}
{{{id=11|
v = [S[i].histogram(10^4,30) for i in range(9)]
G = graphics_array(v,3,3)
G.show(xmin=-1,ymin=0)
}}}
{{{id=12|
v = [S[i].histogram(10^5,50) for i in range(9)]
G = graphics_array(v,3,3)
G.show(xmin=-1,ymin=0)
}}}
{{{id=13|
v = [S[i].histogram(10^6,50) for i in range(9)]
G = graphics_array(v,3,3)
G.show(xmin=-1,ymin=0)
}}}
{{{id=14|
v = [S[i].xyplot(10^4) for i in range(9)]
G = graphics_array(v,3,3)
G.show(figsize=[5,10],xmin=-1,ymin=0)
}}}
{{{id=15|
CM.qqplot(1000000).show()
}}}
{{{id=16|
v = [S[i].qqplot(10^2) for i in range(9)]
show(graphics_array(v,3,3),xmin=0,ymin=0)
}}}
{{{id=17|
v = [S[i].qqplot(10^3) for i in range(9)]
show(graphics_array(v,3,3),xmin=0,ymin=0)
}}}
{{{id=18|
v = [S[i].qqplot(10^4) for i in range(9)]
show(graphics_array(v,3,3),xmin=0,ymin=0)
}}}
{{{id=19|
v = [S[i].qqplot(10^5) for i in range(9)]
show(graphics_array(v,3,3),xmin=0,ymin=0)
}}}
{{{id=20|
v = [S[i].plot_theta_interval(10^3,plot_points=40,max_points=100) for i in range(9)]
show(graphics_array(v,3,3),ymin=0)
}}}
{{{id=21|
v = [S[i].plot_theta_interval(10^4,plot_points=20,max_points=100) for i in range(9)]
show(graphics_array(v,3,3),ymin=0)
}}}
{{{id=22|
v = [S[i].plot_theta_interval(10^5,plot_points=20,max_points=100) for i in range(9)]
show(graphics_array(v,3,3),ymin=0)
}}}
{{{id=23|
v = [S[i].plot_theta_interval(10^6,plot_points=20,max_points=100) for i in range(9)]
show(graphics_array(v,3,3),ymin=0)
}}}
{{{id=24|
v = [S[i].plot_theta_interval(10^6,plot_points=50,max_points=100) for i in range(9)]
show(graphics_array(v,3,3),ymin=0)
}}}
{{{id=25|
v = [S[i].plot_theta_interval(10^5,plot_points=20,max_points=100, a=-0.5, b=0.5) for i in range(9)]
show(graphics_array(v,3,3),ymin=0)
}}}
{{{id=26|
v = [S[i].plot_theta_interval(10^5,plot_points=20,max_points=100, a=-0.5, b=0) for i in range(9)]
show(graphics_array(v,3,3),ymin=0)
}}}
{{{id=27|
v = [S[i].plot_theta_interval(10^5,plot_points=20,max_points=100, a=0, b=0.5) for i in range(9)]
show(graphics_array(v,3,3),ymin=0)
}}}
{{{id=28|
v = [S[i].plot_theta_interval(10^5,plot_points=20,max_points=100, a=-0.2, b=0.2) for i in range(9)]
show(graphics_array(v,3,3),ymin=0)
}}}
{{{id=29|
P = S11a.plot_theta_interval(20000, plot_points=20, max_points=50,verbose=False)
P.show(ymin=0)
}}}
{{{id=30|
E2 = SatoTate(EllipticCurve('37b'))
}}}
{{{id=31|
time E2.plot_theta_interval(10^5,plot_points=10,max_points=50, L_norm=2).show()
///
CPU time: 0.15 s, Wall time: 0.17 s
}}}
{{{id=38|
time E2.plot_theta_interval(10^5,plot_points=10,max_points=50, L_norm=oo).show()
///
CPU time: 3.05 s, Wall time: 3.10 s
}}}
{{{id=39|
time E2.plot_theta_interval(10^6,plot_points=10,max_points=50, L_norm=oo).show()
///
CPU time: 45.13 s, Wall time: 46.76 s
}}}
{{{id=40|
time E2.plot_theta_interval(10^5,plot_points=10,max_points=50, L_norm=2).show()
///
CPU time: 0.16 s, Wall time: 0.17 s
}}}
{{{id=41|
}}}
{{{id=32|
Erank2 = SatoTate(EllipticCurve('433a'))
Erank2._E.rank()
///
2
}}}
{{{id=33|
Erank2.plot_theta_interval(10^6,plot_points=10,max_points=50).show()
}}}
{{{id=34|
S[8].plot_theta_interval(10^6,plot_points=10,max_points=50).show()
}}}
{{{id=35|
Y = S[4].YCab(2*10^6,-1,1)
}}}
{{{id=36|
# We next investigate relation between L_oo and L_2 conjecture and rank
}}}
{{{id=48|
time S2.plot_theta_interval(10^5,plot_points=10,max_points=50, L_norm=2).show()
///
CPU time: 2.82 s, Wall time: 2.91 s
}}}
{{{id=49|
time S3.plot_theta_interval(2*10^5,plot_points=10,max_points=50, L_norm=2).show()
///
CPU time: 4.37 s, Wall time: 4.58 s
}}}
{{{id=50|
time P3 = S3.plot_theta_interval(10^5,plot_points=40,max_points=40, L_norm=2)
///
CPU time: 10.17 s, Wall time: 10.68 s
}}}
{{{id=55|
time P = S0.plot_theta_interval(2*10^4,plot_points=400,max_points=50, L_norm=2)
def conj(x):
return 1 - (1/2)/log(x)
C = plot(conj, 100, 2*10^4)
show(C + P, figsize=[10,7],ymin=0)
///
CPU time: 22.29 s, Wall time: 27.03 s
}}}
{{{id=73|
S0b = SatoTate(EllipticCurve([1,0,0,-1070,7812])) # rank 0 curve with 16 rational torsion points
time P = S0b.plot_theta_interval(2*10^4,plot_points=100,max_points=30, L_norm=2)
def conj(x):
return 1 - (1/2)/log(x)
C = plot(conj, 100, 2*10^4)
show(C + P, figsize=[10,7],ymin=0)
///
Time: CPU 7.05 s, Wall: 8.08 s
}}}
{{{id=74|
S0b = SatoTate(EllipticCurve([1,0,0,-2276760100,41806588162832])) # rank 0 curve with 16 rational torsion points
time P = S0b.plot_theta_interval(2*10^4,plot_points=100,max_points=30, L_norm=2)
def conj(x):
return 1 - (1/2)/log(x)
C = plot(conj, 100, 2*10^4)
show(C + P, figsize=[10,7],ymin=0)
///
Time: CPU 7.40 s, Wall: 8.84 s
}}}
{{{id=76|
S0b = SatoTate(EllipticCurve([1,1,0,-6382494330,-196446593263212])) # rank 0 curve with big height
time P = S0b.plot_theta_interval(2*10^4,plot_points=100,max_points=30, L_norm=2)
def conj(x):
return 1 - (1/2)/log(x)
C = plot(conj, 100, 2*10^4)
show(C + P, figsize=[10,7],ymin=0)
///
Time: CPU 6.62 s, Wall: 7.56 s
}}}
{{{id=86|
S0b = SatoTate(EllipticCurve([1,1,0,-6382494330,-196446593263212])) # rank 0 curve with big height
time P = S0b.plot_theta_interval(2*10^5,plot_points=15,max_points=20, L_norm=2)
def conj(x):
return 1 - (1/2+1)/log(x)
C = plot(conj, 100, 2*10^5)
show(C + P, figsize=[10,7],ymin=0)
///
Time: CPU 9.46 s, Wall: 10.55 s
}}}
{{{id=81|
EllipticCurve([1,1,0,-6382494330,-196446593263212]).Lseries_zeros(10)
///
[0.381937496, 1.10669327, 1.78306573, 2.67003217, 3.31400622, 3.69721591, 4.47711843, 5.40906461, 5.74298574, 6.05685775]
}}}
{{{id=82|
EllipticCurve([0,1,0,83,-541]).Lseries_zeros(10)
///
[0.425771568, 1.35747206, 1.93087578, 2.86700601, 3.19382656, 3.95669880, 4.46037859, 4.92495501, 5.44063183, 6.22234529]
}}}
{{{id=83|
S0b = SatoTate(EllipticCurve([1,0,0,114606,-22471344])) # rank 0 curve with big height
time P = S0b.plot_theta_interval(2*10^4,plot_points=100,max_points=30, L_norm=2)
def conj(x):
return 1 - (1/2 )/log(x)
C = plot(conj, 100, 2*10^4)
show(C + P, figsize=[10,7],ymin=0)
///
Time: CPU 5.88 s, Wall: 6.48 s
}}}
{{{id=85|
e = EllipticCurve([0,0,0,-3,-137])
print e.Lseries_zeros(10)
S0b = SatoTate(e) # rank 0 curve with big height
time P = S0b.plot_theta_interval(2*10^4,plot_points=100,max_points=30, L_norm=2)
def conj(x):
return 1 - (1/2)/log(x)
C = plot(conj, 100, 2*10^4)
show(C + P, figsize=[10,7],ymin=0)
///
[0.520023601, 1.46390028, 1.95614909, 2.92061029, 3.50869960, 4.27684884, 4.61381633, 5.27326559, 5.97248683, 6.67728376]
Time: CPU 5.85 s, Wall: 8.82 s
}}}
{{{id=84|
def conj(x):
return 1 - (1.33 + 1/2)/log(x)
C = plot(conj, 100, 2*10^4)
show(C + P, figsize=[10,7],ymin=0)
}}}
{{{id=77|
S0b = SatoTate(EllipticCurve([0,0,0,20,-160])) # rank 0 curve with big height
time P = S0b.plot_theta_interval(2*10^4,plot_points=100,max_points=30, L_norm=2)
def conj(x):
return 1 - (1/2)/log(x)
C = plot(conj, 100, 2*10^4)
show(C + P, figsize=[10,7],ymin=0)
///
Time: CPU 6.56 s, Wall: 7.25 s
}}}
{{{id=78|
e = EllipticCurve([0,0,0,20,-160])
e.Lseries_zeros(10)
///
[0.608539063, 1.37691916, 2.36681367, 2.59157600, 3.46044322, 3.63239235, 4.00439962, 5.31911644, 5.42716982, 6.31741139]
}}}
{{{id=79|
EllipticCurve('11a').Lseries_zeros(10)
///
[6.36261389, 8.60353962, 10.0355091, 11.4512586, 13.5686391, 15.9140726, 17.0336103, 17.9414336, 19.1857250, 20.3792605]
}}}
{{{id=80|
}}}
{{{id=75|
S1b = SatoTate(EllipticCurve([1,0,0,-49423080,130545230400])) # rank 1 curve with 16 rational torsion points
time P = S1b.plot_theta_interval(2*10^4,plot_points=100,max_points=30, L_norm=2)
def conj(x):
return 1 - (1+1/2)/log(x)
C = plot(conj, 100, 2*10^4)
show(C + P, figsize=[10,7],ymin=0)
///
Time: CPU 7.33 s, Wall: 8.68 s
}}}
{{{id=87|
S1b = SatoTate(EllipticCurve([0,-1,1,-2605193533,16913745257718])) # rank 1 curve with big height
time P = S0b.plot_theta_interval(2*10^5,plot_points=10,max_points=10, L_norm=2)
def conj(x):
return 1 - (1/2+2)/log(x)
C = plot(conj, 100, 2*10^5)
show(C + P, figsize=[10,7],ymin=0)
///
Time: CPU 5.67 s, Wall: 6.17 s
}}}
{{{id=88|
EllipticCurve([0,-1,1,-2605193533,16913745257718]).Lseries_zeros(10)
///
[0.000000000, 0.918917736, 1.50311262, 2.48062026, 3.28311814, 3.90648923, 4.73267355, 5.07671794, 5.38960462, 6.01241899]
}}}
{{{id=51|
time P = S1.plot_theta_interval(10^5,plot_points=80,max_points=40, L_norm=2)
def conj(x):
return 1 - 1/log(x)
C = plot(conj, 100, 10^5)
show(C + P, figsize=[10,7],ymin=0)
}}}
{{{id=56|
time P = S2.plot_theta_interval(10^5,plot_points=40,max_points=40, L_norm=2)
s = float(2)
def conj(x):
return 1 - s/log(x)
C = plot(conj, 100, 10^5)
show(C + P, figsize=[10,7],ymin=0)
///
CPU time: 14.17 s, Wall time: 27.09 s
}}}
{{{id=68|
S2b = SatoTate(EllipticCurve([0,0,0,-1215,42822])) # a rank 2 curve with large conductor and 3-torsion
time P = S2b.plot_theta_interval(10^5,plot_points=100,max_points=40, L_norm=2)
s = float(2)
def conj(x):
return 1 - s/log(x)
C = plot(conj, 100, 10^5)
show(C + P, figsize=[10,7],ymin=0)
///
Time: CPU 40.51 s, Wall: 48.38 s
}}}
{{{id=93|
S2b = SatoTate(EllipticCurve([0,0,0,-1215,42822])) # a rank 2 curve with large conductor and 3-torsion
time P = S2b.plot_theta_interval(5*10^5,plot_points=5,max_points=10, L_norm=2)
s = float(2)
def conj(x):
return 1 - s/log(x)
C = plot(conj, 100, 5*10^5)
show(C + P, figsize=[10,7],ymin=0)
}}}
{{{id=69|
S2b = SatoTate(EllipticCurve([0,0,0,-1215,42822])) # a rank 2 curve with large conductor and 3-torsion
time P = S2b.plot_theta_interval(4*10^4,plot_points=200,max_points=30, L_norm=2)
s = float(2.5)
def conj(x):
return 1 - s/log(x)
C = plot(conj, 100, 4*10^4)
show(C + P, figsize=[10,7],ymin=0)
///
Time: CPU 30.44 s, Wall: 41.40 s
}}}
{{{id=71|
%time
S2b = SatoTate(EllipticCurve([0,1,0,-125,-424])) # last rank 2 in Cremona (to 120K)
P = S2b.plot_theta_interval(10^4,plot_points=100,max_points=20, L_norm=2)
s = float(2.2)
def conj(x):
return 1 - s/log(x)
C = plot(conj, 100, 10^4)
show(C + P, figsize=[10,7],ymin=0)
///
CPU time: 5.22 s, Wall time: 6.90 s
}}}
{{{id=92|
}}}
{{{id=72|
s = float(2.5)
def conj(x):
return 1 - s/log(x)
C = plot(conj, 100, 10^4)
show(C + P, figsize=[10,7],ymin=0)
}}}
{{{id=52|
time P = S3.plot_theta_interval(10^5,plot_points=80,max_points=40, L_norm=2)
s = float(3)
def conj(x):
return 1 - s/log(x)
C = plot(conj, 100, 10^5)
show(C + P, figsize=[10,7],ymin=0)
///
CPU time: 0.41 s, Wall time: 0.48 s
}}}
{{{id=89|
%time
S3b = SatoTate(EllipticCurve([0,1,1,-30,60])) # second rank-3 curve
time P = S3b.plot_theta_interval(2*10^6,plot_points=2,max_points=10, L_norm=2)
s = float(3)
def conj(x):
return 1 - s/log(x)
C = plot(conj, 100, 2*10^6)
show(C + P, figsize=[10,7],ymin=0)
///
Time: CPU 34.64 s, Wall: 57.08 s
CPU time: 36.54 s, Wall time: 60.31 s
}}}
{{{id=91|
%time
S3b = SatoTate(EllipticCurve([0,1,1,-30,60])) # second rank-3 curve
time P = S3b.plot_theta_interval(2*10^6,plot_points=8,max_points=10, L_norm=oo)
s = float(3)
def conj(x):
return 1 - s/log(x)
C = plot(conj, 100, 2*10^6)
show(C + P, figsize=[10,7],ymin=0)
///
0.34
0.00454126481363
0.00310350333117
0.00401606255675
0.00374246662969
0.00282335819277
0.00277784636981
0.00269948551726
0.34
0.00454126481363
0.00310350333117
0.00401606255675
0.00374246662969
0.00282335819277
0.00277784636981
0.00269948551726
Time: CPU 113.93 s, Wall: 130.53 s
CPU time: 114.30 s, Wall time: 130.95 s
}}}
{{{id=64|
S3b = SatoTate(EllipticCurve([1,-1,1,-6,0])) # second rank-3 curve
time P = S3b.plot_theta_interval(10^5,plot_points=40,max_points=40, L_norm=2)
s = float(3)
def conj(x):
return 1 - s/log(x)
C = plot(conj, 100, 10^5)
show(C + P, figsize=[10,7],ymin=0)
///
Time: CPU 12.00 s, Wall: 13.14 s
}}}
{{{id=65|
S3b = SatoTate(EllipticCurve([0,0,0,-8699,252426])) # cremona rank-3 curve with biggest cond
time P = S3b.plot_theta_interval(10^5,plot_points=40,max_points=40, L_norm=2)
s = float(3)
def conj(x):
return 1 - s/log(x)
C = plot(conj, 100, 10^5)
show(C + P, figsize=[10,7],ymin=0)
///
Time: CPU 12.08 s, Wall: 14.11 s
}}}
{{{id=67|
S3b = SatoTate(EllipticCurve([1,0,1,-131,558])) # cremona rank-3 curve with 2-torsion
time P = S3b.plot_theta_interval(10^5,plot_points=40,max_points=40, L_norm=2)
s = float(3)
def conj(x):
return 1 - s/log(x)
C = plot(conj, 100, 10^5)
show(C + P, figsize=[10,7],ymin=0)
///
Time: CPU 13.17 s, Wall: 14.66 s
}}}
{{{id=66|
}}}
{{{id=57|
%time
P = S4.plot_theta_interval(10^4,plot_points=200,max_points=20, L_norm=2)
s = float(3.5)
def conj(x):
return 1 - s/log(x)
C = plot(conj, 100, 10^4)
show(C + P, figsize=[10,7],ymin=0)
///
CPU time: 2.64 s, Wall time: 2.88 s
}}}
{{{id=63|
%time
P = S4.plot_theta_interval(2*10^4,plot_points=500,max_points=20, L_norm=2)
s = float(3.5)
def conj(x):
return 1 - s/log(x)
C = plot(conj, 100, 2*10^4)
show(C + P, figsize=[10,7],ymin=0)
///
CPU time: 26.71 s, Wall time: 31.46 s
}}}
{{{id=58|
time P = S5.plot_theta_interval(10^5,plot_points=80,max_points=40, L_norm=2)
s = float(3.5)
def conj(x):
return 1 - s/log(x)
C = plot(conj, 100, 10^5)
show(C + P, figsize=[10,7],ymin=0)
///
CPU time: 0.33 s, Wall time: 0.34 s
}}}
{{{id=53|
time P6 = S6.plot_theta_interval(10^5,plot_points=60,max_points=40, L_norm=2)
def conj(x):
return 1 - 4/log(x)
C6 = plot(conj, 100, 10^5)
show(C6 + P6, figsize=[20,10])
///
CPU time: 1.19 s, Wall time: 1.26 s
}}}
{{{id=59|
time P = S7.plot_theta_interval(10^5,plot_points=40,max_points=40, L_norm=2)
s = float(4.25)
def conj(x):
return 1 - s/log(x)
C = plot(conj, 100, 10^5)
show(C + P, figsize=[10,7], ymin=0)
///
CPU time: 0.34 s, Wall time: 0.40 s
}}}
{{{id=60|
time P = S8.plot_theta_interval(10^5,plot_points=30,max_points=40, L_norm=2)
s = float(4.25)
def conj(x):
return 1 - s/log(x)
C = plot(conj, 100, 10^5)
show(C + P, figsize=[10,7], ymin=0)
///
CPU time: 5.11 s, Wall time: 5.58 s
}}}
{{{id=61|
time P = S28.plot_theta_interval(10^5,plot_points=20,max_points=40, L_norm=2)
s = float(6.25)
def conj(x):
return 1 - s/log(x)
C = plot(conj, 100, 10^5)
show(C + P, figsize=[10,7], ymin=0)
///
CPU time: 0.37 s, Wall time: 0.37 s
}}}
{{{id=42|
time S2.plot_theta_interval(10^5,plot_points=10,max_points=50, L_norm=oo).show()
///
0.467684212266
0.0352938479114
0.0166787427859
0.0176996046889
0.0156258913368
0.0132107756123
0.0170905493296
0.0145727448193
0.0116221377156
0.00953200941205
CPU time: 2.94 s, Wall time: 3.00 s
}}}
{{{id=43|
time S4.plot_theta_interval(10^5,plot_points=10,max_points=50, L_norm=oo).show()
///
CPU time: 2.90 s, Wall time: 3.61 s
}}}
{{{id=44|
time S6.plot_theta_interval(10^5,plot_points=10,max_points=50, L_norm=oo).show()
///
CPU time: 2.80 s, Wall time: 2.85 s
}}}
{{{id=45|
time S8.plot_theta_interval(10^5,plot_points=10,max_points=50, L_norm=oo).show()
///
CPU time: 2.79 s, Wall time: 2.88 s
}}}
{{{id=46|
time S28.plot_theta_interval(10^5,plot_points=10,max_points=50, L_norm=oo).show()
///
CPU time: 3.12 s, Wall time: 3.16 s
}}}
{{{id=47|
}}}