Description
SumsOfSquares is a package to solve sums-of-squares (SOS) problems via
semidefinite programming (SDP).
Introduction
Writing a polynomial as a sum of squares proves its nonnegativity for all arguments, but not all nonnegative polynomials are sum of squares. While nonnegativity of a polynomial is hard to check, there are efficient methods to find sums-of-squares decompositions, and this package makes some of them available in Macaulay2. These methods rely on semidefinite programming, an area from mathematical optimization. Several solvers (or tools) for semidefinite programming are available. The package
SemidefiniteProgramming allows us to use some of these solvers in Macaulay2. The solver
CSDP is included in Macaulay2 and can be used without any configuration. See
Solver for how to use other solvers.
Usage examples
The most basic application is to (try to) decompose a polynomial as a sum of squares using the function
solveSOS.
i1 : R = QQ[x,y];
|
i2 : f = 2*x^4 + 2*x^3*y - 2*x^2*y^2 + 5*y^4;
|
i3 : sol = solveSOS f;
|
The return value is an object of type
SDPResult which, in the case of success, contains the sum-of-squares decomposition. It can be extracted with
sosPoly. This returns an object of type
SOSPoly, which supports many operations that polynomials support.
i4 : s = sosPoly sol
83 2 2 2 43 20 2 2 231773 2 2
o4 = (5)(- ---x + y ) + (--)(--x + x*y) + (------)(x )
200 20 43 344000
o4 : SOSPoly
|
The command
value(SOSPoly) can be used to check that the decomposition found matches the original polynomial.
i5 : value(s)
4 3 2 2 4
o5 = 2x + 2x y - 2x y + 5y
o5 : R
|
Sums of squares modulo equality constraints
The package supports sum-of-squares
problems in quotient rings. This can be useful to prove nonnegativity of a polynomial on a variety. The following example is taken from [P05]. Consider the problem of proving that the polynomial
f = 10-x^2-y is nonnegative on the circle defined by
g = x^2 + y^2 - 1. To do this we check if
f is a sum of squares in the quotient ring modulo
g. For such a computation, a degree bound must be given by the user.
i6 : R = QQ[x,y];
|
i7 : S = R/ideal(x^2 + y^2 - 1);
|
i8 : f = 10-x^2-y;
|
i9 : sol = solveSOS (f, 2);
|
i10 : sosPoly sol
79 4 2 71 2 63 2
o10 = (--)(y - --) + (--)(x) + (---)(1)
8 79 8 632
o10 : SOSPoly
|
The previous computation gives decomposition with three sums of squares. See
TraceObj for how to obtain a decomposition with only two squares.
Other cool stuff
-
The package implements Hilbert's algorithm to decompose a nonnegative ternary form into a sum of squares of rational functions: sosdecTernary.
-
Sums of squares problems can be solved parametrically: solveSOS.
-
Optimization over varieties can run using lowerBound.
On the role of the coefficient field
The
SumsOfSquares package interfaces tries to hide some of the difficulties that arise from using these numerical procedures. See
coefficient field for more information.