本文整理汇总了Python中sage.rings.all.ComplexField.gen方法的典型用法代码示例。如果您正苦于以下问题:Python ComplexField.gen方法的具体用法?Python ComplexField.gen怎么用?Python ComplexField.gen使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类sage.rings.all.ComplexField
的用法示例。
在下文中一共展示了ComplexField.gen方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: map_to_complex_numbers
# 需要导入模块: from sage.rings.all import ComplexField [as 别名]
# 或者: from sage.rings.all.ComplexField import gen [as 别名]
def map_to_complex_numbers(self, z, prec=None):
"""
Evaluate ``self`` at a point `z \in X_0(N)` where `z` is given by
a representative in the upper half plane, returning a point in
the complex numbers.
All computations are done with ``prec`` bits
of precision. If ``prec`` is not given, use the precision of `z`.
Use self(z) to compute the image of z on the Weierstrass equation
of the curve.
EXAMPLES::
sage: E = EllipticCurve('37a'); phi = E.modular_parametrization()
sage: tau = (sqrt(7)*I - 17)/74
sage: z = phi.map_to_complex_numbers(tau); z
0.929592715285395 - 1.22569469099340*I
sage: E.elliptic_exponential(z)
(...e-16 - ...e-16*I : ...e-16 + ...e-16*I : 1.00000000000000)
sage: phi(tau)
(...e-16 - ...e-16*I : ...e-16 + ...e-16*I : 1.00000000000000)
"""
if prec is None:
try:
prec = z.parent().prec()
except AttributeError:
prec = 53
CC = ComplexField(prec)
if z in QQ:
raise NotImplementedError
z = CC(z)
if z.imag() <= 0:
raise ValueError("Point must be in the upper half plane")
# TODO: for very small imaginary part, maybe try to transform under
# \Gamma_0(N) to a better representative?
q = (2 * CC.gen() * CC.pi() * z).exp()
# nterms'th term is less than 2**-(prec+10) (c.f. eclib code)
nterms = (-(prec + 10) / q.abs().log2()).ceil()
# Use Horner's rule to sum the integral of the form
enumerated_an = list(enumerate(self._E.anlist(nterms)))[1:]
lattice_point = 0
for n, an in reversed(enumerated_an):
lattice_point += an / n
lattice_point *= q
return lattice_point
示例2: hilbert_class_polynomial
# 需要导入模块: from sage.rings.all import ComplexField [as 别名]
# 或者: from sage.rings.all.ComplexField import gen [as 别名]
#.........这里部分代码省略.........
AndreyTimofeev
- Sage implementation corrected by John Cremona (using corrected precision bounds from Andreas Enge)
- Magma implementation by David Kohel
EXAMPLES::
sage: hilbert_class_polynomial(-4)
x - 1728
sage: hilbert_class_polynomial(-7)
x + 3375
sage: hilbert_class_polynomial(-23)
x^3 + 3491750*x^2 - 5151296875*x + 12771880859375
sage: hilbert_class_polynomial(-37*4)
x^2 - 39660183801072000*x - 7898242515936467904000000
sage: hilbert_class_polynomial(-37*4, algorithm="magma") # optional - magma
x^2 - 39660183801072000*x - 7898242515936467904000000
sage: hilbert_class_polynomial(-163)
x + 262537412640768000
sage: hilbert_class_polynomial(-163, algorithm="sage")
x + 262537412640768000
sage: hilbert_class_polynomial(-163, algorithm="magma") # optional - magma
x + 262537412640768000
TESTS::
sage: all([hilbert_class_polynomial(d, algorithm="arb") == \
....: hilbert_class_polynomial(d, algorithm="sage") \
....: for d in range(-1,-100,-1) if d%4 in [0,1]])
True
"""
if algorithm is None:
algorithm = "arb"
D = Integer(D)
if D >= 0:
raise ValueError("D (=%s) must be negative"%D)
if not (D%4 in [0,1]):
raise ValueError("D (=%s) must be a discriminant"%D)
if algorithm == "arb":
import sage.libs.arb.arith
return sage.libs.arb.arith.hilbert_class_polynomial(D)
if algorithm == "magma":
magma.eval("R<x> := PolynomialRing(IntegerRing())")
f = str(magma.eval("HilbertClassPolynomial(%s)"%D))
return IntegerRing()['x'](f)
if algorithm != "sage":
raise ValueError("%s is not a valid algorithm"%algorithm)
from sage.quadratic_forms.binary_qf import BinaryQF_reduced_representatives
from sage.rings.all import RR, ZZ, ComplexField
from sage.functions.all import elliptic_j
# get all primitive reduced quadratic forms, (necessary to exclude
# imprimitive forms when D is not a fundamental discriminant):
rqf = BinaryQF_reduced_representatives(D, primitive_only=True)
# compute needed precision
#
# NB: [http://arxiv.org/abs/0802.0979v1], quoting Enge (2006), is
# incorrect. Enge writes (2009-04-20 email to John Cremona) "The
# source is my paper on class polynomials
# [http://hal.inria.fr/inria-00001040] It was pointed out to me by
# the referee after ANTS that the constant given there was
# wrong. The final version contains a corrected constant on p.7
# which is consistent with your example. It says:
# "The logarithm of the absolute value of the coefficient in front
# of X^j is bounded above by
#
# log (2*k_2) * h + pi * sqrt(|D|) * sum (1/A_i)
#
# independently of j", where k_2 \approx 10.163.
h = len(rqf) # class number
c1 = 3.05682737291380 # log(2*10.63)
c2 = sum([1/RR(qf[0]) for qf in rqf], RR(0))
prec = c2*RR(3.142)*RR(D).abs().sqrt() + h*c1 # bound on log
prec = prec * 1.45 # bound on log_2 (1/log(2) = 1.44..)
prec = 10 + prec.ceil() # allow for rounding error
# set appropriate precision for further computing
Dsqrt = D.sqrt(prec=prec)
R = ComplexField(prec)['t']
t = R.gen()
pol = R(1)
for qf in rqf:
a, b, c = list(qf)
tau = (b+Dsqrt)/(a<<1)
pol *= (t - elliptic_j(tau))
coeffs = [cof.real().round() for cof in pol.coefficients(sparse=False)]
return IntegerRing()['x'](coeffs)
示例3: Dokchitser
# 需要导入模块: from sage.rings.all import ComplexField [as 别名]
# 或者: from sage.rings.all.ComplexField import gen [as 别名]
#.........这里部分代码省略.........
sage: L.num_coeffs()
4
"""
return Integer(self.gp().eval('cflength(%s)'%T))
def init_coeffs(self, v, cutoff=1,
w=None,
pari_precode='',
max_imaginary_part=0,
max_asymp_coeffs=40):
"""
Set the coefficients `a_n` of the `L`-series. If
`L(s)` is not equal to its dual, pass the coefficients of
the dual as the second optional argument.
INPUT:
- ``v`` - list of complex numbers or string (pari
function of k)
- ``cutoff`` - real number = 1 (default: 1)
- ``w`` - list of complex numbers or string (pari
function of k)
- ``pari_precode`` - some code to execute in pari
before calling initLdata
- ``max_imaginary_part`` - (default: 0): redefine if
you want to compute L(s) for s having large imaginary part,
- ``max_asymp_coeffs`` - (default: 40): at most this
many terms are generated in asymptotic series for phi(t) and
G(s,t).
EXAMPLES::
sage: L = Dokchitser(conductor=1, gammaV=[0,1], weight=12, eps=1)
sage: pari_precode = 'tau(n)=(5*sigma(n,3)+7*sigma(n,5))*n/12 - 35*sum(k=1,n-1,(6*k-4*(n-k))*sigma(k,3)*sigma(n-k,5))'
sage: L.init_coeffs('tau(k)', pari_precode=pari_precode)
Evaluate the resulting L-function at a point, and compare with the answer that
one gets "by definition" (of L-function attached to a modular form)::
sage: L(14)
0.998583063162746
sage: a = delta_qexp(1000)
sage: sum(a[n]/float(n)^14 for n in range(1,1000))
0.9985830631627459
Illustrate that one can give a list of complex numbers for v
(see :trac:`10937`)::
sage: L2 = Dokchitser(conductor=1, gammaV=[0,1], weight=12, eps=1)
sage: L2.init_coeffs(list(delta_qexp(1000))[1:])
sage: L2(14)
0.998583063162746
TESTS:
Verify that setting the `w` parameter does not raise an error
(see :trac:`10937`). Note that the meaning of `w` does not seem to
be documented anywhere in Dokchitser's package yet, so there is
no claim that the example below is meaningful! ::