phase1(1)

NAME
phase1 - feasability test for semidefinite programming

CALLING SEQUENCE
[x,Z,z,ul,iters] = phase1(F,blck_szs,M,nu,abstol,maxiters);

PARAMETERS

F   : L x (m+1) real matrix

blck_szs
    : p x 2 integer matrix (sizes of the blocks) defining the dimensions of the (square) diagonal blocks size(Fi(j)=blck_szs(j) j=1,...,m+1.

M   : positive real number (should be big enough)

nu  : real integer (default value is nu=10).

abstol
    : real number (absolute tolerance).

maxiters
    : integer (maximum number of iterations allowed).

x   : real m-vector

Z   : block-diagonal matrix stored as [vec(Z(1));vec(Z(2)); ... ;vec(Z(L))] where Z(i) is the ith block

z   : real number

ul  : 2-vector, primal and dual objective

iters
    : integer scalar (number of iterations performed)

DESCRIPTION
Find an x s.t. F(x) > 0 and trace(F(x)) < M or prove that no such x exists. phase1 solves the following primal-dual problem:
 minimize    t
 subject to  F(x) + t*I = F_0 + x_1*F_1 + ... + x_m*F_m + t*I >= 0
             Tr F(x) <= M
 maximize    -Tr F_0*(Z-z*I) - M*z
 subject to  0 = Tr F_i*(Z - z*I)
             1 = Tr Z
             Z >= 0, z >= 0

The Fi's matrices are stored columnwise in F in compressed format: if F_i^j, i=0,..,m, j=1,...,L denote the jth (symmetric) diagonal block of F_i, then
    [ F_0^1(:)  F_1^1(:) ...  F_m^1(:) ]
    [ F_0^2(:)  F_1^2(:) ...  F_m^2(:) ]
F=  [   ...       ...          ...     ]
    [ F_0^L(:)  F_1^L(:) ...  F_m^L(:) ]

blck_szs gives the size of block j, ie, F_i^j has size blck_szs[j] x blck_szs[j].

Z is a block diagonal matrix with L blocks Z^0, ..., Z^{L-1}. Z^j has size blck_szs[j] times blck_szs[j].

The 2 vector ul contains the primal objective value c'*x and the dual objective value -Tr F_0*Z.

The entries of options are respectively: nu = a real parameter which ntrols the rate of convergence. abstol = absolute tolerance. iters = on entry: maximum number of iterations >= 0, on exit: the number of iterations taken.

EXAMPLE
F0=[2,1,0,0;
    1,2,0,0;
    0,0,3,1
    0,0,1,3];
F1=[1,2,0,0;
    2,1,0,0;
    0,0,1,3;
    0,0,3,1]
F2=[2,2,0,0;
    2,2,0,0;
    0,0,3,4;
    0,0,4,4];
blck_szs=[2,2];
F01=F0(1:2,1:2);F02=F0(3:4,3:4);
F11=F1(1:2,1:2);F12=F1(3:4,3:4);
F21=F2(1:2,1:2);F22=F2(3:4,3:4);
F=[[F01(:);F02(:)],[F11(:);F12(:)],[F21(:);F22(:)]]
M=50;nu=2;abstol=1.d-10;iters=20;
[x,Z,z,ul,iters] = phase1(F,blck_szs,M,nu,abstol,iters)
w=vec2list(Z,[blck_szs;blck_szs]);Z=sysdiag(w(1),w(2))
spec(F0+F1*x(1)+F2*x(2))
trace(F1*(Z-z*eye))
trace(F2*(Z-z*eye))

SEE ALSO
phase1, bigM

AUTHOR
L. Vandenbergue, S. Boyd