NCSOStoolsdemo - Cyclic equivalence and sum of hermitian squares
%**************************************************************************
% Cyclic equivalence and sum of hermitian squares *
%**************************************************************************
% -------------------------------------------------------------------------
% First we construct some symbolic noncommuting variables
% -------------------------------------------------------------------------
>> NCvars x y
% -------------------------------------------------------------------------
% We can check whether two polynomials f and g are cyclically equivalent,
% i.e., whether f - g is a sum of commutators.
% -------------------------------------------------------------------------
>> NCisCycEq(x^2*y*x + y*x^3, 2*x*y*x^2)
ans = 1
% -------------------------------------------------------------------------
% We can construct a canonical cyclically equivalent representative of the
% polynomial
% -------------------------------------------------------------------------
>> NCcycEqRep(x^2*y*x + y*x^3 + x*y*x + x^2*y - 2*y*x^2)
ans = 2*x^3*y
% -------------------------------------------------------------------------
% We can check whether the polynomial is cyclically equivalent to a sum of
% hermitian squares.
% -------------------------------------------------------------------------
>> f = x^4 - 2*x^2*y + y^2 + x*y - y*x;
>> [IsCycEq,X,base,sohs,g] = NCcycSos(f)
***** NCSOStools: module NCcycSos started *****
Input polynomial has (max) degree 4 and min degree 2.
Detected 5 monomials in 2 variables.
There are 31 monomials in 2 variables of degree at most 4.
There are 28 monomials in 2 variables of degree at most 4 and at least 2.
Preprocessing the input polynomial ...
Returned cyclically equivalent polynomial with (max) degree 4 and min degree 2.
Detected 3 monomials in 2 variables.
There are 31 monomials in 2 variables of degree at most 4.
There are 28 monomials in 2 variables of degree at most 4 and at least 2.
Using alpha degree to construct the monomial vector.
Keeping 2 monomials in the monomial vector.
Computing cyclically equivalent products ... done.
Preparing linear constraints ...
Number of linear constraints: 3.
Starting SDP solver ...
...
Residual norm: 2.8174e-015
Computing SOHS decomposition ... done.
Found SOHS decomposition with 2 factors.
IsCycEq = 1
X = 1.0000 -1.0000
-1.0000 1.0000
base = 'y'
'x*x'
sohs = -x^2+y
6e-008*x^2
g = 1*x^4-x^2*y-y*x^2+y^2
% -------------------------------------------------------------------------
% NCcycSos has many optional parameters. For example we can set the
% smallest value that is considered to be nonzero in numerical
% calculations.
% -------------------------------------------------------------------------
>> params.precision = 1e-5;
>> [IsCycEq,X,base,sohs,g] = NCcycSos(f,params)
***** NCSOStools: module NCcycSos started *****
Input polynomial has (max) degree 4 and min degree 2.
Detected 5 monomials in 2 variables.
There are 31 monomials in 2 variables of degree at most 4.
There are 28 monomials in 2 variables of degree at most 4 and at least 2.
Preprocessing the input polynomial ...
Returned cyclically equivalent polynomial with (max) degree 4 and min degree 2.
Detected 3 monomials in 2 variables.
There are 31 monomials in 2 variables of degree at most 4.
There are 28 monomials in 2 variables of degree at most 4 and at least 2.
Using alpha degree to construct the monomial vector.
Keeping 2 monomials in the monomial vector.
Computing cyclically equivalent products ... done.
Preparing linear constraints ...
Number of linear constraints: 3.
Starting SDP solver ...
...
Residual norm: 2.8174e-015
Computing SOHS decomposition ... done.
Found SOHS decomposition with 1 factors.
IsCycEq = 1
X = 1.0000 -1.0000
-1.0000 1.0000
base = 'y'
'x*x'
sohs = -x^2+y
g = x^4-x^2*y-y*x^2+y^2
% -------------------------------------------------------------------------
% We can compute the maximal epsilon such that f-epsilon is cyclically
% equivalent to a sum of hermitian squares.
% -------------------------------------------------------------------------
>> f = x^4 - 4*x^2*y + 8*y + 4*y^2 - 4*x^2;
>> [opt,X,base,sohs,g] = NCcycMin(f)
***** NCSOStools: module NCcycMin started *****
Input polynomial has (max) degree 4 and min degree 1.
Detected 5 monomials in 2 variables.
There are 31 monomials in 2 variables of degree at most 4.
There are 30 monomials in 2 variables of degree at most 4 and at least 1.
Preprocessing the input polynomial ...
Returned cyclically equivalent polynomial with (max) degree 4 and min degree 0.
Detected 6 monomials in 2 variables.
There are 31 monomials in 2 variables of degree at most 4.
Constructing monomial vector with 4 monomials.
Computing cyclically equivalent products ... done.
Preparing linear constraints ...
Number of linear constraints: 8.
Starting SDP solver ...
...
Residual norm: 1.8939e-010
Computing SOHS decomposition ... done.
Found SOHS decomposition with 4 factors.
opt = -4.0000
X = 4.0000 4.0000 -0.0000 -2.0000
4.0000 4.0000 -0.0000 -2.0000
-0.0000 -0.0000 0.0000 0.0000
-2.0000 -2.0000 0.0000 1.0000
base = ''
'y'
'x'
'x*x'
sohs = 2-x^2+2*y
5.99e-006*x^2+5.55e-006*y
1.025e-005*x
4.91e-006*x^2
g = 4-4*x^2+1*x^4-2*x^2*y+8*y-2*y*x^2+4*y^2
% -------------------------------------------------------------------------
% NCcycMin has many optional parameters. For example we can set the
% smallest value that is considered to be nonzero in numerical
% calculations.
% -------------------------------------------------------------------------
>> params.precision = 1e-4;
>> [opt,X,base,sohs,g] = NCcycMin(f,params)
***** NCSOStools: module NCcycMin started *****
Input polynomial has (max) degree 4 and min degree 1.
Detected 5 monomials in 2 variables.
There are 31 monomials in 2 variables of degree at most 4.
There are 30 monomials in 2 variables of degree at most 4 and at least 1.
Preprocessing the input polynomial ...
Returned cyclically equivalent polynomial with (max) degree 4 and min degree 0.
Detected 6 monomials in 2 variables.
There are 31 monomials in 2 variables of degree at most 4.
Constructing monomial vector with 4 monomials.
Computing cyclically equivalent products ... done.
Preparing linear constraints ...
Number of linear constraints: 8.
Starting SDP solver ...
...
Residual norm: 1.8939e-010
Computing SOHS decomposition ... done.
Found SOHS decomposition with 1 factors.
opt = -4.0000
X = 4.0000 4.0000 -0.0000 -2.0000
4.0000 4.0000 -0.0000 -2.0000
-0.0000 -0.0000 0.0000 0.0000
-2.0000 -2.0000 0.0000 1.0000
base = ''
'y'
'x'
'x*x'
sohs = 2-x^2+2*y
g = 4-4*x^2+x^4-2*x^2*y+8*y-2*y*x^2+4*y^2
% -------------------------------------------------------------------------
% We can check if the second directional derivative of a polynomial is
% cyclically equivalent to a sum of hermitian squares.
% -------------------------------------------------------------------------
>> f = 1 + 2*x^2 + x*y + 2*y^2;
>> [iscConvex,g,sohs,h] = NCisCycConvex(f,10e-5)
iscConvex = 1
g = 4*h1^2+2*h1*h2+4*h2^2
sohs = 0.5*h1+2*h2
1.937*h1
h = 4.0000323*h1^2+h1*h2+h2*h1+4*h2^2