Demonstration of multipoly and sosopt packages

Demonstrated during Lecture 4 of CDS 270 on Oct 13th.

By U. Topcu & A. Lamperski

Contents

Basic manipulations with multipoly

Define two polynomial objects x1 and x2

pvar x1 x2

Form the polynomial p = 2*x1^4 + 2*x1^3*x2 - x1^2*x2^2 + 5*x2^4

p = 2*x1^4 + 2*x1^3*x2 - x1^2*x2^2 + 5*x2^4
 
p = 
  2*x1^4 + 2*x1^3*x2 
  - x1^2*x2^2 + 5*x2^4
 

Check the fields of p

p.coef
ans =

   (1,1)        2
   (2,1)        2
   (3,1)       -1
   (4,1)        5

p.deg
ans =

   (1,1)        4
   (2,1)        3
   (3,1)        2
   (2,2)        1
   (3,2)        2
   (4,2)        4

p.var
ans = 

    'x1'
    'x2'

Vector representation example

x = [x1;x2];

Form the monomials vector

w = monomials(x,0:4);

Compute the coefficients vector

c = poly2basis(p,w);

Does the decomposition work?

p - c'*w
 
ans = 
  0
 

Gram matrix representation

Compute the monomials vector z, a particular Q for the equality p = z'*Q*z, and all homogenous solutions.

[z,Q,N] = gramsol(p);
Q = full(reshape(Q,[3 3]));
N = full(reshape(N,[3 3]));

Does the decomposition work?

p-z'*Q*z
 
ans = 
  0
 

Check the homogenous solution.

z'*N*z
 
ans = 
  0
 

Is p an SOS polynomial?

p is SOS iff there exists lambda such that Q+lambda*N is psd.

Let's take a range for lambda and check the minimum eigenvalues of Q+lambda*N for values of lambda on a grid in this range.

lambda = linspace(-2,10,100);
for i1 = 1:length(lambda)
    mineig(i1) = min(eig(Q+lambda(i1)*N));
end

Plot the result

plot(lambda,mineig,'k','linewidth',2);
xlabel('\lambda','fontsize',18); ylabel('min(eig((Q+lambda*N))','fontsize',18);

SOS feasibility using sosopt

Check if p is a SOS polynomial using sosopt

[feas,z,Q] = issos(p);

Check if the decomposition works

p - z'*Q*z
 
ans = 
  -1.3145e-12*x1^4 
  + 6.6191e-13*x1^3*x2 
  - 2.3053e-12*x1^2
  *x2^2 + 1.1367e-15*x1
  *x2^3 - 3.2774e-13*x2^4
 

Is the Gram matrix psd?

min(eig(Q))
ans =

    0.7271

Montzkin polynomial

What happens if we call issos for a Montzkin polynomial?

pMon = x1^2*x2^4 + x1^4*x2^2 + 1 - 3*x1^2*x2^2;
[feas,z,Q] = issos(pMon);

Check the feasibility

feas
feas =

     0

SOS synthesis example

Given polynomials f0 and f1, find the smallest value of alpha such that f0+alpha*f1 is SOS

Problem set-up with polynomial toolbox and sosopt

pvar x1 x2 alpha;
f0 = -x1^4 + 2*x1^3*x2 + 9*x1^2*x2^2 - 2*x2^4;
f1 = x1^4 + x2^4;
x = [x1;x2];
obj = alpha;
[info,dopt,sossol]=sosopt(f0+alpha*f1,x,obj);

s is f0+alpha*f1 evaluated at the minimal alpha

s = sossol{1};

z and Q are the Gram matrix decomposition of s

z=sossol{2}; Q=sossol{3};

Feasibility of sosopt result

info.feas
ans =

     1

Minimal value of alpha

dopt
dopt = 

    'alpha'    [2.0000]

Verify s is f0+alpha*f1 evaluated at alpha = 2.00

s-subs( f0+alpha*f1, dopt)
 
ans = 
  0
 

Verify z and Q are the Gram matrix decomposition of s

s-z'*Q*z
 
ans = 
  -2.4096e-10*x1^4 
  + 4.3805e-11*x1^3*x2 
  - 2.1902e-11*x1^2
  *x2^2 + 9.7467e-16*x1
  *x2^3 - 2.6285e-10*x2^4
 

Verify Q is positive semi-definite

min(eig(Q))
ans =

   1.3718e-10

Global lower bound for a polynomial

Given a polynomial p,

Problem of interest: min_x p(x)

Write the problem as

max_{alpha,x} alpha subject to p(x) - alpha >= 0 for all x

This is an hard problem, but if we replace psd constraint by a SOS constraint, we can compute a lower bound on the optimal value of alpha using sosopt.

The following problem can be solved using sosopt:

max_{alpha,x} alpha subject to p(x) - alpha >= 0 is SOS in x

pvar x1 x2 x3 alpha;
x = [x1;x2;x3];
p = x1^4 + 4*x3^4 - 2*x1^2*x3 + 4*x1*x3^2 - 4*x2*x3^2 - 5.16*x1^2 - 2*x1*x2 + x2^2 + 6.24*x3^2 + 2.62*x1 - 2.62*x2 + 6.16*x3 + 4.3325;
obj = -alpha;
[info,dopt,sossol]=sosopt(p-alpha,x,obj);

Feasibility of sosopt result

info.feas
ans =

     1

Optimal value of alpha

dopt
dopt = 

    'alpha'    [-6.8700]

Then the conclusion is that p is (globally) greater than or equal to the optimal value of alpha

Global Stability Analysis

Later in the course, we will learn why the following statement is correct and in fact many more extensions of such statement.

Let a dynamical system be governed by dx/dt = f(x) with f(0) = 0.

Then, if there exists a positive definite function V such that V(0) = 0 and dV/dt < 0 for all x, then the origin is a globally, asymptotically stable equilibrium point for the system.

Now, we use sosopt to find a quadratic V that satisfies the above conditions for a specific vector field f.

Define the vector field

pvar x1 x2;
x = [x1;x2];
x1dot = -x1 - 2*x2^2;
x2dot = -x2 - x1*x2 - 2*x2^3;
f = [x1dot; x2dot];

Monomials vector to form a V using polydecvar's vector option

zV = monomials(x,2);

Candidate V is of the for V(X) = c'*zV(x)

V = polydecvar('c',zV,'vec');

Constraint 1 : V(x) - L1 \in SOS - this is to make sure that V is positive definite

L1 = 1e-6 * ( x1^2 + x2^2 );
sosconstr{1} = V - L1;

Constraint 2: -Vdot - L2 \in SOS

L2 = 1e-6 * ( x1^2 + x2^2 );
Vdot = jacobian(V,x)*xdot;
sosconstr{2} = -Vdot - L2;

Solve with feasibility problem

[info,dopt,sossol] = sosopt(sosconstr,x);

Is the problem feasible?

info.feas
ans =

     1

What does V look like

Vsol = subs(V,dopt)
 
Vsol = 
  0.30089*x1^2 + 7.3212e
  -18*x1*x2 + 0.6018*x2^2