Documentation‎ > ‎NCSOStoolsdemo‎ > ‎

NCSOStoolsdemo - Sum of hermitian squares (SOHS) related


%**************************************************************************
% Sum of hermitian squares (SOHS) related                                 *
%**************************************************************************

% -------------------------------------------------------------------------
% First we construct some symbolic noncommuting variables and some
% polynomials
% -------------------------------------------------------------------------

>> NCvars x y z
>> f = y*x^2*y - y*x*z + 4*y*z^2*y - z*x*y + z^2;
>> g = 2*x + 2*x^2 + x*y + 2*y + y*x + y^2;
>> h = x^2 + x*y + y*x + 2*y^2 + z^2 - 1;


% -------------------------------------------------------------------------
% We can check whether the polynomial is a sum of hermitian squares and
% compute the desired decomposition.
% -------------------------------------------------------------------------

>> [IsSohs,X,base,sohs,fsos] = NCsos(f)

***** NCSOStools: module NCSos started *****

Input polynomial has (max) degree 4 and min degree 2.
Detected 5 monomials in 3 variables.
There are 121 monomials in 3 variables of degree at most 4.
There are 117 monomials in 3 variables of degree at most 4 and at least 2.
After Newton Chip Method keeping 3 monomials.
Number of linear constraints: 6.

Starting SDP solver ...
...
Residual norm: 1.1896e-014

Computing SOHS decomposition ... done.
Found SOHS decomposition with 3 factors.

*************** Polynomial is SOHS ***************

IsSohs = 1

X =  1.0000    0.0000   -1.0000
     0.0000    4.0000   -0.0000
    -1.0000   -0.0000    1.0000

base = 'x*y'
       'z*y'
       'z'
 
sohs =    x*y-z
          2*z*y
       5e-008*z
 
fsos = y*x^2*y-y*x*z+4*y*z^2*y-z*x*y+1*z^2

 
% -------------------------------------------------------------------------
% NCsos 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;
>> [IsSohs,X,base,sohs,fsos] = NCsos(f,params)

***** NCSOStools: module NCSos started *****

Input polynomial has (max) degree 4 and min degree 2.
Detected 5 monomials in 3 variables.
There are 121 monomials in 3 variables of degree at most 4.
There are 117 monomials in 3 variables of degree at most 4 and at least 2.
After Newton Chip Method keeping 3 monomials.
Number of linear constraints: 6.

Starting SDP solver ...
...
Residual norm: 1.1896e-014

Computing SOHS decomposition ... done.
Found SOHS decomposition with 2 factors.

*************** Polynomial is SOHS ***************

IsSohs = 1

X =  1.0000    0.0000   -1.0000
     0.0000    4.0000   -0.0000
    -1.0000   -0.0000    1.0000

base = 'x*y'
       'z*y'
       'z'
 
sohs = x*y-z
       2*z*y
 
fsos = y*x^2*y-y*x*z+4*y*z^2*y-z*x*y+z^2

 
% -------------------------------------------------------------------------
% We can also computes the maximal epsilon such that the polynomial
% g-epsilon is a sum of hermitian squares.
% -------------------------------------------------------------------------

>> g
 
g = 2*x+2*x^2+x*y+2*y+y*x+y^2
 
>> [epsilon,X,base,sohs,gmin] = NCmin(g)

Input polynomial has no constant term ... we add it for computing the base of monomials.
Input polynomial has (max) degree 2 and min degree 0.
Detected 7 monomials in 2 variables.
There are 7 monomials in 2 variables of degree at most 2.
After Newton Chip Method keeping 3 monomials.
Number of linear constraints: 5.

Starting SDP solver ...
...
Residual norm: 2.7182e-010

Computing SOHS decomposition ... done.
Found SOHS decomposition with 3 factors.

epsilon = -1.0000


X = 1.0000    1.0000    1.0000
    1.0000    2.0000    1.0000
    1.0000    1.0000    1.0000

base = ''
       'x'
       'y'

sohs =      1+x+y
                x
       4.1e-007*y
 
gmin = 1+2*x+2*x^2+x*y+2*y+y*x+1*y^2


% -------------------------------------------------------------------------
% NCmin 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;
>> [epsilon,X,base,sohs,gmin] = NCmin(g,params)

Input polynomial has no constant term ... we add it for computing the base of monomials.
Input polynomial has (max) degree 2 and min degree 0.
Detected 7 monomials in 2 variables.
There are 7 monomials in 2 variables of degree at most 2.
After Newton Chip Method keeping 3 monomials.
Number of linear constraints: 5.

Starting SDP solver ...
...
Residual norm: 2.7182e-010

Computing SOHS decomposition ... done.
Found SOHS decomposition with 2 factors.

epsilon = -1.0000

X = 1.0000    1.0000    1.0000
    1.0000    2.0000    1.0000
    1.0000    1.0000    1.0000

base = ''
       'x'
       'y'
 
sohs = 1+x+y
           x
 
gmin = 1+2*x+2*x^2+x*y+2*y+y*x+y^2


% -------------------------------------------------------------------------
% For given polynomials f and g we can compute the maximal epsilon such
% that the polynomial f-epsilon*g is a sum of hermitian squares.
% -------------------------------------------------------------------------

>> [epsilon,X,base,sohs,poly] = NCdiff(x^2-x^2*y-y*x^2+y*x^2*y+4*y^2,x*y+y*x-2*y*x*y)

Input polynomial has (max) degree 4 and min degree 2.
Detected 8 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.
After Newton Chip Method keeping 3 monomials.
Number of linear constraints: 6.

Starting SDP solver ...
...
Residual norm: 1.285e-011

Computing SOHS decomposition ... done.
Found SOHS decomposition with 3 factors.

***** Optimal solution found:  epsilon_max = 2.000000 *****

epsilon = 2.0000

X =  1.0000   -2.0000   -1.0000
    -2.0000    4.0000    2.0000
    -1.0000    2.0000    1.0000

base = 'x'
       'y'
       'x*y'
 
sohs =                 x-x*y-2*y
       3.95e-006*x*y+5.58e-006*y
                   2.54e-006*x*y
 
poly = x^2-x^2*y-2*x*y-2*y*x-y*x^2+1*y*x^2*y+4*y*x*y+4*y^2


% -------------------------------------------------------------------------
% We can check if the polynomial is convex, i.e., if its second directional
% derivative is a sum of hermitian squares.
% -------------------------------------------------------------------------

>> g
 
g = 2*x+2*x^2+x*y+2*y+y*x+y^2
 
>> [isConvex,g,sohs] = NCisConvex0(g)

isConvex = 1

g = 4*h1^2+2*h1*h2+2*h2*h1+2*h2^2
 
sohs = 2*h1+h2
            h2


% -------------------------------------------------------------------------
% We can also check if the polynomial is convex without SDP solvers
% -------------------------------------------------------------------------

>> isConvex = NCisConvex(g)

isConvex = 1