solvemoment computes lower bounds to polynomial programs using Lasserre’s moment-method, i.e., semidefinite relaxations.
[sol,xoptimal,momentdata,sos] = solvemoment(F,h,options,order)
The command is used for finding lower bounds on a polynomial \(h(x)\), subject to constraints \(F(x)\succeq 0\), where \(F(x)\) is a collection of polynomial scalar or matrix inequalities (and equalities).
x1 = sdpvar(1,1);x2 = sdpvar(1,1);x3 = sdpvar(1,1); h = -2*x1+x2-x3; F = [x1*(4*x1-4*x2+4*x3-20)+x2*(2*x2-2*x3+9)+x3*(2*x3-13)+24>=0, 4-(x1+x2+x3)>=0, 6-(3*x2+x3)>=0, 2-x1>=0, 3-x3>=0, x1>=0, x2>=0, x3>=0]; solvemoment(F,h); value(h) ans = -6.0000
In the code above, we solved the problem with the lowest possible lifting (decided by YALMIP), and the lower bound turned out to be -6 (this value can be obtained using value since the objective is linear. In the general case, [relaxvalue] is required to retrieve relaxed values on expressions after solving relaxations). A higher order relaxation gives better bounds.
solvemoment(F,h,,2); value(h) ans = -5.69 solvemoment(F,h,,3); value(h) ans = -4.0685 solvemoment(F,h,,4); value(h) ans = -4.0000
For a more complete introduction, please study the moment tutorial, and the quick introduction to semidefinite relaxations in relaxvalue.