#20790: Computing plane curve models for algebraic curves
-------------------------------------+-------------------------------------
Reporter: gjorgenson | Owner:
Type: enhancement | Status: needs_review
Priority: minor | Milestone: sage-7.3
Component: algebraic | Resolution:
geometry | Merged in:
Keywords: gsoc2016 | Reviewers:
Authors: Grayson Jorgenson | Work issues:
Report Upstream: N/A | Commit:
Branch: | 0de1323a77147059de0f82c7a8642c44c31552ed
u/gjorgenson/ticket/20790 | Stopgaps:
Dependencies: |
-------------------------------------+-------------------------------------
Comment (by mmarco):
A few questions:
- It could make sense in some cases to consider projections even if the
image is not a curve (or if it is, but some components could be mapped to
points). I think we should allow that, but maybe raising a warning about
it.
- In python (and sage), indices start in 0. Shouldn't we follow that
approach when selecting the coordinates we project to? MAybe we could also
allow a list (or tuple) of variables as input.
- don't modify the input `indices` inside the function. That could have
undesired side effects. Instead, create an internal copy.
- I think you go into too much trouble to define the elimination ideal.
Just calling `elimination_ideal`on it should give you the ideal defining
the image. Something like this:
{{{
sage: A.<x,y,z> = AffineSpace(QQ,3)
sage: C = Curve([y^7 - x^2 + x^3 - 2*z, z^2 - x^7 - y^2], A)
sage: I = C.defining_ideal()
sage: IE = I.elimination_ideal(z)
sage: IE
Ideal (y^14 + 2*x^3*y^7 - 2*x^2*y^7 - 4*x^7 + x^6 - 2*x^5 + x^4 - 4*y^2)
of Multivariate Polynomial Ring in x, y, z over Rational Field
sage: A2 = AffineSpace(QQ, 2, (x,y))
sage: H = C.Hom(A2)
sage: phi = H((x,y))
sage: phi
Scheme morphism:
From: Affine Curve over Rational Field defined by y^7 + x^3 - x^2 - 2*z,
-x^7 - y^2 + z^2
To: Affine Space of dimension 2 over Rational Field
Defn: Defined on coordinates by sending (x, y, z) to
(x, y)
sage: C2 = Curve([A2.coordinate_ring()(i) for i in IE.gens()],A2)
sage: C2
Affine Plane Curve over Rational Field defined by y^14 + 2*x^3*y^7 -
2*x^2*y^7 - 4*x^7 + x^6 - 2*x^5 + x^4 - 4*y^2
}}}
should be enough to construct both the morphism and the image curve.
Something similar could be done for the projective case.
- Do we want to create new coordinates in the case of affine projection?
or would it be better to keep the original ones? Maybe have an option for
this?
- I think it would me slightly more pythonic to return a tuple instead of
a list.
- In the projective case, ¿would it make sense to have an option to
project to smaller subspaces?
- In the plane projection method, instead of breaking the loop, just
return `L`. Also, you could avoid the double loop by just iterating over
the Subsets of the coordinates (maybe this is slower, but I think it would
make the code easyer to read).
- I am confused by this part of the code in the projective projection:
{{{
l = list(PP.gens())
for i in range(n+1):
l[i] = 1
while(F(l) == 0):
l[i] = l[i] + 1
}}}
I think that, in general, you could get simpler projections if you start
with l[i] = 0 (for instance, most times you will get the projection from
point [0:0:...: 0:1].
- In this code, why do you create H in the first time? You redefine it
just later without using it:
{{{
H = Hom(PP, PP)
# only need the first n coordinates of the change of coordinates
map
coords = [PP.gens()[i] - Q[i]/Q[n]*PP.gens()[n] for i in range(n)]
# create the projection map onto the first n coordinates
PP2 = ProjectiveSpace(self.base_ring(), n - 1)
H = Hom(self, PP2)
}}}
--
Ticket URL: <http://trac.sagemath.org/ticket/20790#comment:5>
Sage <http://www.sagemath.org>
Sage: Creating a Viable Open Source Alternative to Magma, Maple, Mathematica,
and MATLAB
--
You received this message because you are subscribed to the Google Groups
"sage-trac" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/sage-trac.
For more options, visit https://groups.google.com/d/optout.