This package provides randomized numerical methods for finding complex solutions to systems of polynomial equations. The main methods implemented in this package find solutions to polynomial systems of equations over the complex numbers. As described in "Solving polynomial systems via homotopy continuation and monodromy" (2016), these methods pair numerical homotopy continuation with the transitive monodromy action of a suitable covering map.
It includes several blackbox functions based on these methods.
solveFamily is blackbox solver that can work with SLPexpressions or the PolySystem type. Here is an example illustrating how to solve a parametric family for specific parameter values.
i1 : setRandomSeed 0 o1 = 0 |
i2 : declareVariable \ {A,B,C,D,X,Y} o2 = {A, B, C, D, X, Y} o2 : List |
i3 : PS = gateSystem(matrix{{A,B,C,D}},matrix{{X,Y}},matrix{{A*(X-1)^2-B}, {C*(Y+2)^2+D}}) o3 = gate system: 2 ---> 2 (#parameters = 4) o3 : GateSystem |
i4 : solveFamily(point{{1,1,1,1}}, PS) o4 = ({1, 1, 1, 1}, {{-8.98401e-17, -2-ii}, PointArray( 2 points: 0 1 ), {2, ------------------------------------------------------------------------ -2-ii}}) o4 : Sequence |
i5 : R=CC[a,b,c,d][x,y] o5 = R o5 : PolynomialRing |
i6 : F=polySystem {a*(x-1)^2-b, c*(y+2)^2+d} o6 = F o6 : PolySystem |
i7 : solveFamily(point{{1,1,1,1}}, F) o7 = ({1, 1, 1, 1}, {{2, -2-ii}, PointArray( 2 points: 0 1 ), {2, -2+ii}}) o7 : Sequence |
monodromySolve is the core function called by solveFamily. Its default setting are less conservative and may be faster at the expense of reliability: see MonodromySolverOptions. For non-parametric systems, the solver sparseMonodromySolve essentially calls solveFamily assuming the genericity conditions of the Bernstein-Kurhnirenko theorem are satisfied.
Each solver works by assembling randomly generated systems within a HomotopyGraph and tracking paths between them. They are also equipped with a number of options, which may be useful for speeding up computation or increasing the probability of success.
In the example above, the underlying graph is "seeded" automatically. The current seeding implementation will fail, for instance, in cases where there are equations without parameters. In such a case, the user may find a seed pair themselves (see monodromySolve(System,Point,List) for an example.)
This documentation describes version 1.13 of MonodromySolver.
The source code from which this documentation is derived is in the file MonodromySolver.m2. The auxiliary files accompanying it are in the directory MonodromySolver/.