SOSTOOLS in MATLAB: findbound gives wrong output

75 Views Asked by At

Here is the MATLAB code that uses SOSTOOLS toolbox:

clear;
syms a12 a13 C;
deg = 6;
vartable = [a12, a13, C];
prog = sosprogram(vartable);
solver_opt.solver = 'mosek';
[sol_C, vars, xopt] = findbound(C,[0],[-1 -54*a12^2 - 81*a12^4 - 54*a13^2 - 486*a12^2*a13^2 - 81*a13^4 + C*(1 + 6*a12^2 + a12^4 + 6*a13^2 + 6*a12^2*a13^2 + a13^4)],deg,solver_opt);

Output says:

No lower bound could be computed. Unbounded below or infeasible?

Whereas the Mathematica code:

Minimize[{c, -1 - 54*a12^2 - 81*a12^4 - 54*a13^2 - 486*a12^2*a13^2 - 
    81*a13^4 + 
    c*(1 + 6*a12^2 + a12^4 + 6*a13^2 + 6*a12^2*a13^2 + a13^4) == 
   0}, {a12, a13, c}]

gives the expected (correct) output:

{1, {a12 -> 0, a13 -> 0, c -> 1}}

What went wrong in the MATLAB code?

1

There are 1 best solutions below

2
On BEST ANSWER

A sum-of-squares approach tries to compute a lower bound (and in lucky cases where the bound is tight it might be possible to recover a solution). Here, it looks like the relaxation simply is bad due to too low degree multiplier (or there is a bug in your code, see below)

The code has a suspicious space as you are creating a vector of size 1x2 when you define the equalities

[-1 -54*a12^2 - 81

That is probably supposed to be

[-1 - 54*a12^2 - 81