Witness sets and the numerical irreducible decomposition
Example 8.11 from Numerically solving polynomial systems with Bertini, by Daniel J. Bates, Jonathan D. Haunstein, Andrew J. Sommese and Charles W. Wampler (SIAM 2013).
We wish to solve the system of polynomial equations
The complex solution of this system consists of a surface (), the tangent bundle to a sphere in complex space; three lines (
and
with
free;
and
with
free); one nonlinear curve (
and
) and an isolated point
. To find these solutions (called an irreducible decomposition), Bertini uses witness sets (see the book for details).
polysyms x y z S = x^2+y^2+z^2-1; T = y-x^2; U = z-x^3; poly_system = BertiniLab('function_def',[T*S*(x-2); U*S*(y-2); T*U*S*(z-2)], ... 'variable_group',[x y z]); poly_system = poly_system.irreducible_decomposition; results = poly_system.solve_summary; istart = strfind(results,'************** Decomposition by Degree'); disp(results(istart:end))
************** Decomposition by Degree ************** Dimension 2: 1 classified component ----------------------------------------------------- degree 2: 1 component Dimension 1: 4 classified components ----------------------------------------------------- degree 1: 3 components degree 3: 1 component Dimension 0: 1 classified component ----------------------------------------------------- degree 1: 1 component *****************************************************
The surface has degree 2 and dimension 2; the nonlinear curve has degree 1 and dimension 3.
Components can be sampled using the method sample:
component = struct('dim',2,'component_number',0); points_on_sphere = poly_system.sample(component,100,'sphere_sample'); disp(points_on_sphere)
x: [1x100 polysym] y: [1x100 polysym] z: [1x100 polysym]