Given a nonnegative ternary form f, this method uses Hilbert’s algorithm to compute a decomposition of f as f=(∏ipi)/(∏iqi) where each factor pi and qi is SOS. The method returns null if f is not nonnegative. As an example, consider the homogeneous Motzkin polynomial:
i1 : R = RR[x,y,z]; |
i2 : f = library ("Motzkin", {x,y,z}); |
i3 : (p,q) = sosdecTernary (f); -- warning: experimental computation over inexact field begun -- results not reliable (one warning given per session) Executing CSDP Input file: /tmp/M2-28885-0/4.dat-s Output file: /tmp/M2-28885-0/5 Status: SDP solved, primal-dual feasible SDP solved in preprocessing |
The result, in this case, is a quotient of two sums of squares.
i4 : (#p, #q) o4 = (1, 1) o4 : Sequence |
i5 : f * sumSOS q#0 == sumSOS p#0 o5 = false |
References: Products of positive forms, linear matrix inequalities, and Hilbert 17th problem for ternary forms, E. de Klerk, and D.V. Pasechnik, European J. Oper. Res. (2004), pp. 39-45.
• This implementation only works with the solvers "CSDP" and "MOSEK".
• Due to the iterative nature of the algorithm, it could happen that some of the the output SOS polynomials are rational while some are real.