# Transforming cubic curve with parameter into Weierstrass form

I can transform cubic curve without parameter using this code:

Input:

R.<x,y,z> = QQ[]
f = EllipticCurve_from_cubic(-7*x^3 + 13*x*y^2 - 5*x^2*z + 11*y^2*z - 3*x*z^2 - 2*z^3, [0,1,0])
f


Output:

Scheme morphism:
From: Projective Plane Curve over Rational Field defined by -7*x^3 + 13*x*y^2 - 5*x^2*z + 11*y^2*z - 3*x*z^2 - 2*z^3
To:   Elliptic Curve defined by y^2 = x^3 + 21034*x^2 + 73922290*x + 106779857275 over Rational Field
Defn: Defined on coordinates by sending (x : y : z) to
(1/13*z : 13*y : -1/34255*x - 11/445315*z)


How to do it when there is a parameter p inside cubic like for example:

-7*x^3 + 13*x*y^2 - 5*x^2*z + 11*y^2*z - 3*x*z^2 - (2+p)*z^3


I got error when I use the same code.

edit retag close merge delete

Sort by » oldest newest most voted An elliptic curve over $\mathbb{Q}$ with a parameter $p$ can be seen as an elliptic curve over the function field $\mathbb{Q}(p)$:

sage: K.<p> = FunctionField(QQ)
sage: R.<x,y,z> = K[]
sage: f = EllipticCurve_from_cubic(-7*x^3 + 13*x*y^2 - 5*x^2*z + 11*y^2*z - 3*x*z^2 - (2+p)*z^3, [0,1,0])
sage: f
Scheme morphism:
From: Projective Plane Curve over Rational function field in p over Rational Field defined by (-7)*x^3 + 13*x*y^2 + (-5)*x^2*z + 11*y^2*z + (-3)*x*z^2 + (-p - 2)*z^3
To:   Elliptic Curve defined by y^2 = x^3 + 21034*x^2 + (-61634638*p+73922290)*x + (74231495611*p^2-178060984010*p+106779857275) over Rational function field in p over Rational Field
Defn: Defined on coordinates by sending (x : y : z) to
(1/13*z : 13*y : (1/28561/(p - 2635/2197))*x + (11/371293/(p - 2635/2197))*z)


Substituting $p=0$ recovers the original morphism/curve:

sage: phi = K.hom(QQ.zero()); phi
Function Field morphism:
From: Rational function field in p over Rational Field
To:   Rational Field
Defn: p |--> 0
sage: [h.map_coefficients(phi) for h in f.defining_polynomials()]
[1/13*z, 13*y, -1/34255*x - 11/445315*z]
sage: E = f.codomain(); E.change_ring(phi)
Elliptic Curve defined by y^2 = x^3 + 21034*x^2 + 73922290*x + 106779857275 over Rational Field


Note that $p = 2635/2197$ is bad, because:

sage: P2.<x,y,z> = ProjectiveSpace(2, QQ)
sage: C = Curve(-7*x^3 + 13*x*y^2 - 5*x^2*z + 11*y^2*z - 3*x*z^2 - (2+2635/2197)*z^3)
sage: C.is_smooth()
False
sage: C.is_irreducible()
False
sage: C.irreducible_components()
[
Closed subscheme of Projective Space of dimension 2 over Rational Field defined by:
13*x + 11*z,
Closed subscheme of Projective Space of dimension 2 over Rational Field defined by:
1183*x^2 - 2197*y^2 - 156*x*z + 639*z^2
]


Also the cubic $f(x)$ in $y^2 = f(x)$ should have distinct roots, so the curve is smooth:

sage: A.<p> = QQ[]
sage: B.<x> = A[]
sage: f = x^3 + 21034*x^2 + (-61634638*p+73922290)*x + (74231495611*p^2-178060984010*p+106779857275)
sage: [z.radical_expression() for z in f.discriminant().roots(QQbar, multiplicities=False)]
[2635/2197, -76/1323*I*sqrt(38) - 1951/1323, 76/1323*I*sqrt(38) - 1951/1323]


This shows that $p=-1951/1323 \pm 76/1323\sqrt{-38}$ are also bad. Explicitly:

sage: K.<p> = FunctionField(QQ)
sage: R.<x,y,z> = K[]
sage: F = -7*x^3 + 13*x*y^2 - 5*x^2*z + 11*y^2*z - 3*x*z^2 - (2+p)*z^3
sage: psi1 = K.hom(76/1323*a - 1951/1323)
sage: G1 = F.map_coefficients(psi1)
sage: C1 = Curve(G1)
sage: C1.is_smooth()
False
sage: C1.singular_points()
[(-1/21*a - 5/21 : 0 : 1)]
sage: psi2 = K.hom(-76/1323*a - 1951/1323)
sage: G2 = F.map_coefficients(psi2)
sage: C2 = Curve(G2)
sage: C2.is_smooth()
False
sage: C2.singular_points()
[(1/21*a - 5/21 : 0 : 1)]

more

Excellent answer. I was not sure how to define p as a parameter.

@rburing: Can it be adapted to work with more than one parameter? (I will work only with rational parameters so $p=-1951/1323 \pm 76/1323\sqrt{-38}$ is not a big problem for me. But anyway, your deep analysis is very interesting.)

1

You can do e.g.

K = PolynomialRing(QQ, names='p,q').fraction_field()
p,q = K.gens()
R.<x,y,z> = K[]
f = EllipticCurve_from_cubic(-7*x^3 + 13*x*y^2 - 5*x^2*z + 11*y^2*z - (3+q)*x*z^2 - (2+p)*z^3, [0,1,0])