Suppose we want numerical approximations of all complex isolated solutions to the following system:
i1 : R = CC[x,y,z] o1 = R o1 : PolynomialRing |
i2 : S = {x+y+z-1, x^2+y^2, x+y-z-3} 2 2 o2 = {x + y + z - 1, x + y , x + y - z - 3} o2 : List |
We call PHCpack's blackbox solver:
i3 : L = solveSystem(S) o3 = {{1-ii, 1+ii, -1}, {1+ii, 1-ii, -1}} o3 : List |
The method solveSystem prints the the PHCpack input and output file names and returns two solutions. The solutions are of type Point, defined in NAGtypes. Each Point comes with diagnostics. For example, LastT is the end value of the continuation parameter; if it equals 1, then the solver reached the end of the path properly.
i4 : oneSoln = L_0 o4 = oneSoln o4 : Point |
i5 : peek oneSoln o5 = Point{ConditionNumber => 6.32111 } Coordinates => {1-ii, 1+ii, -1} LastT => 1 SolutionStatus => Regular |
The method handles overdetermined systems by inserting slack variables.
i6 : system = {y-x^2, z-x^3, x+y+z-1, x+y+ x^3 -1} 2 3 3 o6 = {- x + y, - x + z, x + y + z - 1, x + x + y - 1} o6 : List |
i7 : #system > numcols vars R --overdetermined system o7 = true |
i8 : solns = solveSystem(system); *** after parseSolutions, ring has {x, y, z} *** |
i9 : numSolns = #solns o9 = 3 |
The method solveSystem does not check the dimension of the system; it checks for number of equations instead. So solveSystem will return an error if there are less equations than unknowns even if the system is zero-dimensional. In addition, if the system is square but not zero-dimensional, the output is meaningless. Thus, it is suggested that the user checks the dimension of the system before using solveSystem.
The object solveSystem is a method function with options.