CoCalc Public Filessupport / 2015-01-27-height.sagewsOpen in with one click!
Authors: Harald Schilly, ℏal Snyder, William A. Stein
Description: Jupyter notebook support/2015-06-04-141749-bokeh.ipynb
E = EllipticCurve('389a')
File: /usr/local/sage/sage-6.4/local/lib/python2.7/site-packages/sage/schemes/elliptic_curves/ Source: def point_search(self, height_limit, verbose=False, rank_bound=None): """ Search for points on a curve up to an input bound on the naive logarithmic height. INPUT: - ``height_limit (float)`` - bound on naive height - ``verbose (bool)`` - (default: False) If True, report on each point as found together with linear relations between the points found and the saturation process. If False, just return the result. - ``rank_bound (bool)`` - (default: None) If provided, stop searching for points once we find this many independent nontorsion points. OUTPUT: points (list) - list of independent points which generate the subgroup of the Mordell-Weil group generated by the points found and then saturated. .. warning:: height_limit is logarithmic, so increasing by 1 will cause the running time to increase by a factor of approximately 4.5 (=exp(1.5)). IMPLEMENTATION: Uses Michael Stoll's ratpoints library. EXAMPLES:: sage: E=EllipticCurve('389a1') sage: E.point_search(5, verbose=False) [(-1 : 1 : 1), (-3/4 : 7/8 : 1)] Increasing the height_limit takes longer, but finds no more points:: sage: E.point_search(10, verbose=False) [(-1 : 1 : 1), (-3/4 : 7/8 : 1)] In fact this curve has rank 2 so no more than 2 points will ever be output, but we are not using this fact. :: sage: E.saturation(_) ([(-1 : 1 : 1), (-3/4 : 7/8 : 1)], 1, 0.152460177943144) What this shows is that if the rank is 2 then the points listed do generate the Mordell-Weil group (mod torsion). Finally, :: sage: E.rank() 2 If we only need one independent generator:: sage: E.point_search(5, verbose=False, rank_bound=1) [(-2 : 0 : 1)] """ from sage.libs.ratpoints import ratpoints from sage.functions.all import exp from sage.rings.arith import GCD H = exp(float(height_limit)) # max(|p|,|q|) <= H, if x = p/q coprime coeffs = [16*self.b6(), 8*self.b4(), self.b2(), 1] points = [] a1 = self.a1() a3 = self.a3() new_H = H*2 # since we change the x-coord by 2 below for X,Y,Z in ratpoints(coeffs, new_H, verbose): if Z == 0: continue z = 2*Z x = X/2 y = (Y/z - a1*x - a3*z)/2 d = GCD((x,y,z)) x = x/d if max(x.numerator().abs(), x.denominator().abs()) <= H: y = y/d z = z/d points.append(self((x,y,z))) if rank_bound is not None: points = self.saturation(points, verbose=verbose)[0] if len(points) == rank_bound: break if rank_bound is None: points = self.saturation(points, verbose=verbose)[0] return points
search_src("height bound")
libs/ratpoints.pyx:156: # Set the height bound: libs/mwrank/mwrank.pyx:338: The Silverman height bound for this elliptic curve. libs/mwrank/mwrank.pyx:365: The Cremona-Prickett-Siksek height bound for this elliptic curve. libs/mwrank/mwrank.pyx:401: A height bound for this elliptic curve. libs/mwrank/mwrank.pyx:409: Cremona_Prickett-Siksek height bounds. libs/mwrank/mwrank.pyx:1021: - ``firstlim`` (int, default 20) -- naive height bound on libs/mwrank/mwrank.pyx:1026: - ``secondlim`` (int, default 8) -- naive height bound on libs/mwrank/ Return the Cremona-Prickett-Siksek height bound. This is a libs/mwrank/ Return the Silverman height bound. This is a floating point rings/ A height bound may be specified to indicate the maximum coefficient rings/ only possible minimal polynomial satisfying the height bound, or no rings/ raise NotImplementedError("proof and height bound only implemented for real and complex numbers") schemes/elliptic_curves/ print "height bound in [%s, %s]" % (mu, mu*eps) schemes/elliptic_curves/ It can happen that no points are found if the height bounds schemes/elliptic_curves/ verbose("Heegner height bound = %s"%h) schemes/elliptic_curves/ verbose("Heegner height bound = %s"%h) schemes/elliptic_curves/ Return the Cremona-Prickett-Siksek height bound. This is a schemes/elliptic_curves/ Return the Silverman height bound. This is a positive real schemes/projective/ is determined by the height bound `B`. Then apply the the LLL algorithm to determine if the lift schemes/projective/ - ``B`` - a positive integer - the height bound for a rational preperiodic point. (optional) matrix/matrix_cyclo_dense.pyx:1674: verbose("using height bound %s"%height_bound, level=echelon_verbose_level)
E = mwrank_EllipticCurve([0, 0, 0, -1002231243161, 0]) E.CPS_height_bound??
File: /usr/local/sage/sage-6.4/local/lib/python2.7/site-packages/sage/libs/mwrank/ Source: def CPS_height_bound(self): r""" Return the Cremona-Prickett-Siksek height bound. This is a floating point number `B` such that if `P` is a point on the curve, then the naive logarithmic height `h(P)` is less than `B+\hat{h}(P)`, where `\hat{h}(P)` is the canonical height of `P`. .. warning:: We assume the model is minimal! EXAMPLES:: sage: E = mwrank_EllipticCurve([0, 0, 0, -1002231243161, 0]) sage: E.CPS_height_bound() 14.163198527061496 sage: E = mwrank_EllipticCurve([0,0,1,-7,6]) sage: E.CPS_height_bound() 0.0 """ return self.__curve.cps_bound()