This function is a general-purpose solver for zero-dimensional polynomial systems. The default Strategy is "Stickelberger", which leverages Stickelberger's theorem to compute the coordinates of solution points as (joint) eigenvalues of multiplication matrices corresponding to the variables of the ring.
The option Multiplier allows the user to specify the linear form used to construct the multiplication matrix. For example, if the ambient polynomial ring is $QQ[x,y,z]$ and only the $y$-coordinates of solutions are needed, then one can specify Multiplier => y (and ignore the coordinates of other solution points). By default, a random linear form is used: due to this, it may be helpful to run this function a couple of times to minimize the likelihood of a "bad" linear form being chosen.
The option Basis allows the user to specify a basis of the quotient $R/I$, if one is known. The default value is null, in which case a basis for $R/I$ will be computed via a Grobner basis computation.
In general, Strategy => "Stickelberger" does not require the input ideal I to be radical, so solutions may appear with multiplicity:
i1 : R = QQ[x,y] o1 = R o1 : PolynomialRing |
i2 : I = ideal"x2,xy,y3" 2 3 o2 = ideal (x , x*y, y ) o2 : Ideal of R |
i3 : sols = zeroDimSolve I o3 = {{0, 0}, {-8.90741e-293, 0}, {0, -8.01667e-292}, {0, -8.01667e-292}} o3 : List |
i4 : #sols == 4 and all(sols, p -> clean(1e-16, matrix p) == 0) o4 = true |
The object zeroDimSolve is a method function with options.