Documentation‎ > ‎NCSOStoolsdemo‎ > ‎

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