next | previous | forward | backward | up | top | index | toc | Macaulay2 website
SumsOfSquares :: coefficient field

coefficient field -- the role of the coefficient field

The SumsOfSquares package works with two coefficient rings: the rational numbers $\QQ$ and the real numbers $\RR$. Almost all operations in this package rely on a numerical semidefinite programming Solver. When calling such a solver, even if the input was a polynomial with rational coefficients, the result is numerical. The package makes some effort to round and return a rational result, but this can fail, independent of whether a rational sum-of-squares decomposition exists or not. In case of failure, a real result is returned. The following example of Scheiderer is a sum of squares, but does not admit any rational decomposition. Consequently the package must return a real solution.

i1 : f = library("Scheiderer", QQ[x,y,z])

      4      3    4     2          2      2 2      3      3    4
o1 = x  + x*y  + y  - 3x y*z - 4x*y z + 2x z  + x*z  + y*z  + z

o1 : QQ[x..z]
i2 : sol = solveSOS (f);
i3 : sosPoly sol

                        2                        2                                     2 2                       2                          2                                       2 2                    2                       2                                     2 2                      2                       2                                   2 2                    2                        2                                     2 2                      2                        2                                     2 2
o3 = 3.30453e-9*(.34757x  - .033818x*y + .768917y  + .336255x*z - .203873y*z + .363573z )  + 5.71258e-9*(.318117x  + .679504x*y - .00674149y  + .148906x*z + .644086y*z - .00320002z )  + .612614*(- .4895x  + .51536x*y - .174267y  + .126103x*z - .330015y*z + .582763z )  + .889186*(- .389152x  + .18471x*y + .191412y  + .590207x*z - .14029y*z - .64014z )  + 1.85689*(.622038x  + .195425x*y - .441065y  + .199984x*z - .564971y*z - .145442z )  + 3.99241*(.00407877x  - .446348x*y - .383633y  + .678615x*z + .309522y*z + .311865z )

o3 : SOSPoly

Given a sum-of-squares decomposition with real coefficients, it is often useful to ignore the squares with very small coefficients. The function clean(RR,SOSPoly) removes the squares whose coefficients are smaller than a given tolerance.

i4 : clean (0.001, sosPoly sol)

                      2                       2                                     2 2                      2                       2                                   2 2                    2                        2                                     2 2                      2                        2                                     2 2
o4 = .612614*(- .4895x  + .51536x*y - .174267y  + .126103x*z - .330015y*z + .582763z )  + .889186*(- .389152x  + .18471x*y + .191412y  + .590207x*z - .14029y*z - .64014z )  + 1.85689*(.622038x  + .195425x*y - .441065y  + .199984x*z - .564971y*z - .145442z )  + 3.99241*(.00407877x  - .446348x*y - .383633y  + .678615x*z + .309522y*z + .311865z )

o4 : SOSPoly

See also