1 | initial version |
There is no closed form for the roots of a polynomial in general. So we'll have to assume that you can somehow compute roots.
One nice trick to get a parametrization is to compute a Groebner basis in lexicographic order. You need to put your parameters last in the order of variables. Say,
sage: R.<x,y,z> = PolynomialRing(QQ, order='lex')
sage: I = R.ideal([5*x - 1/3*y^2 - 2*y*z + y - 5/4*z^2, -3/2*x - 1/13*y*z + 4])
These are two (random) polynomial equations in three variables, so we expect the solution to be a curve. Indeed, it is:
sage: I.dimension()
1
It is also an irreducible curve, that is, not two curves that are disjoint or intersect in a point:
sage: I.primary_decomposition()
[Ideal (52*y^2 + 352*y*z - 156*y + 195*z^2 - 2080, 39*x + 2*y*z - 104) of Multivariate Polynomial Ring in x, y, z over Rational Field]
The Groebner basis in the given lexicographic order is:
sage: I.groebner_basis()
[x + 2/39*y*z - 8/3,
y^2 + 88/13*y*z - 3*y + 15/4*z^2 - 40]
The last variable (in the lexicographic order) is z, which we take to be the parameter. The second equation in the Groebner basis depends only on y and z, so if you plug in a value for z then it is a polynomial equation in a single variable. Solving this univariate polynomial equation yields multiple (in this case, two) solutions for y. Then plug y,z into the first equation of the Groebner basis. You get one polynomial equation in x, which you have to solve again. Hence, you have determined y(z) and x(y(z),z), that is, parametrized your curve by z.