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 - .0338185x*y + .768917y + .336255x*z - .203874y*z + .363573z ) + 5.71257e-9*(.318117x + .679504x*y - .00674091y + .148907x*z + .644086y*z - .00319975z ) + .612611*(- .489504x + .515357x*y - .174266y + .126103x*z - .33001y*z + .582766z ) + .88919*(- .389146x + .18471x*y + .191405y + .590213x*z - .140295y*z - .640139z ) + 1.85689*(.622038x + .195424x*y - .44107y + .199983x*z - .564971y*z - .145429z ) + 3.9924*(.00407928x - .446352x*y - .383631y + .678611x*z + .309527y*z + .311867z ) 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 = .612611*(- .489504x + .515357x*y - .174266y + .126103x*z - .33001y*z + .582766z ) + .88919*(- .389146x + .18471x*y + .191405y + .590213x*z - .140295y*z - .640139z ) + 1.85689*(.622038x + .195424x*y - .44107y + .199983x*z - .564971y*z - .145429z ) + 3.9924*(.00407928x - .446352x*y - .383631y + .678611x*z + .309527y*z + .311867z ) o4 : SOSPoly |