def get_bound_dynamical(F, f, m=1, dynatomic=True, prec=53, emb=None): """ The hyperbolic distance from `j` which must contain the smallest map. This defines the maximum possible distance from `j` to the `z_0` covariant of the associated binary form `F` in the hyperbolic 3-space for which the map `f`` could have smaller coefficients. INPUT: - ``F`` -- binary form of degree at least 3 with no multiple roots associated to ``f`` - ``f`` -- a dynamical system on `P^1` - ``m`` - positive integer. the period used to create ``F`` - ``dynatomic`` -- boolean. whether ``F`` is the periodic points or the formal periodic points of period ``m`` for ``f`` - ``prec``-- positive integer. precision to use in CC - ``emb`` -- embedding into CC OUTPUT: a positive real number EXAMPLES:: sage: from sage.dynamics.arithmetic_dynamics.endPN_minimal_model import get_bound_dynamical sage: P.<x,y> = ProjectiveSpace(QQ,1) sage: f = DynamicalSystem([50*x^2 + 795*x*y + 2120*y^2, 265*x^2 + 106*y^2]) sage: get_bound_dynamical(f.dynatomic_polynomial(1), f) 35.5546923182219 """ def coshdelta(z): #The cosh of the hyperbolic distance from z = t+uj to j return (z.norm() + 1) / (2 * z.imag()) if F.base_ring() != ComplexField(prec=prec): if emb is None: compF = F.change_ring(ComplexField(prec=prec)) else: compF = F.change_ring(emb) else: compF = F n = F.degree() z0F, thetaF = covariant_z0(compF, prec=prec, emb=emb) cosh_delta = coshdelta(z0F) d = f.degree() hF = e**f.global_height(prec=prec) #get precomputed constants C,k if m == 1: C = 4 * d + 2 k = 2 else: Ck_values = {(False, 2, 2): (322, 6), (False, 2, 3): (385034, 14),\ (False, 2, 4): (4088003923454, 30), (False, 3, 2): (18044, 8),\ (False, 4, 2): (1761410, 10), (False, 5, 2): (269283820, 12),\ (True, 2, 2): (43, 4), (True, 2, 3): (106459, 12),\ (True, 2, 4): (39216735905, 24), (True, 3, 2): (1604, 6),\ (True, 4, 2): (114675, 8), (True, 5, 2): (14158456, 10)} try: C, k = Ck_values[(dynatomic, d, m)] except KeyError: raise ValueError("constants not computed for this (m,d) pair") if n == 2 and d == 2: #bound with epsilonF = 1 bound = 2 * ((2 * C * (hF**k)) / (thetaF)) else: bound = cosh(epsinv(F, (2**(n - 1)) * C * (hF**k) / thetaF, prec=prec)) return bound
def get_bound_dynamical(F, f, m=1, dynatomic=True, prec=53, emb=None): """ The hyperbolic distance from `j` which must contain the smallest map. This defines the maximum possible distance from `j` to the `z_0` covariant of the assocaited binary form `F` in the hyperbolic 3-space for which the map `f`` could have smaller coefficients. INPUT: - ``F`` -- binary form of degree at least 3 with no multiple roots associated to ``f`` - ``f`` -- a dynamical system on `P^1` - ``m`` - positive integer. the period used to create ``F`` - ``dyantomic`` -- boolean. whether ``F`` is the periodic points or the formal periodic points of period ``m`` for ``f`` - ``prec``-- positive integer. precision to use in CC - ``emb`` -- embedding into CC OUTPUT: a positive real number EXAMPLES:: sage: from sage.dynamics.arithmetic_dynamics.endPN_minimal_model import get_bound_dynamical sage: P.<x,y> = ProjectiveSpace(QQ,1) sage: f = DynamicalSystem([50*x^2 + 795*x*y + 2120*y^2, 265*x^2 + 106*y^2]) sage: get_bound_dynamical(f.dynatomic_polynomial(1), f) 35.5546923182219 """ def coshdelta(z): #The cosh of the hyperbolic distance from z = t+uj to j return (z.norm() + 1)/(2*z.imag()) if F.base_ring() != ComplexField(prec=prec): if emb is None: compF = F.change_ring(ComplexField(prec=prec)) else: compF = F.change_ring(emb) else: compF = F n = F.degree() z0F, thetaF = covariant_z0(compF, prec=prec, emb=emb) cosh_delta = coshdelta(z0F) d = f.degree() hF = e**f.global_height(prec=prec) #get precomputed constants C,k if m == 1: C = 4*d+2;k=2 else: Ck_values = {(False, 2, 2): (322, 6), (False, 2, 3): (385034, 14),\ (False, 2, 4): (4088003923454, 30), (False, 3, 2): (18044, 8),\ (False, 4, 2): (1761410, 10), (False, 5, 2): (269283820, 12),\ (True, 2, 2): (43, 4), (True, 2, 3): (106459, 12),\ (True, 2, 4): (39216735905, 24), (True, 3, 2): (1604, 6),\ (True, 4, 2): (114675, 8), (True, 5, 2): (14158456, 10)} try: C,k = Ck_values[(dynatomic,d,m)] except KeyError: raise ValueError("constants not computed for this (m,d) pair") if n == 2 and d == 2: #bound with epsilonF = 1 bound = 2*((2*C*(hF**k))/(thetaF)) else: bound = cosh(epsinv(F, (2**(n-1))*C*(hF**k)/thetaF, prec=prec)) return bound