 
  
  
  
  
Here we describe a number of support routines which are available. These routines are in the subdirectory support except where noted. More information is available by typing help routine_name from within Matlab.
  
 
where fname is the name of the file (string) to which the data must be exported. The data will be stored in one of the formats described in Appendix A. If the data was successfully exported, export.m returns 0, otherwise 1. The file name fname must have a period and an extension (other than the standard Matlab extensions mat, mex etc.) following the period (see Section 3.1). The calling sequence for import.m is
  
 
where fname is the name of a file (string) containing an SQLP in one of the two formats described in Appendix A.
 ;
 ;   ,
 ,   ;
and the primal and dual objective values, respectively, as a function
of the iteration count.
 ;
and the primal and dual objective values, respectively, as a function
of the iteration count.
  
 
where M is a block diagonal matrix (not a structure),
blk is a vector of block sizes, and
sortflag is an optional input argument.
The vector of eigenvalues, lam, is sorted blockwise in
ascending or descending order depending on whether
sortflag is 1 or -1.
The matrix of eigenvectors, Q, has its columns permuted
accordingly.  The output parameter
indef is set to 1 if the input matrix   is not positive
definite and 0 otherwise.
For example, eigenvalue complementarity may be checked by typing
  is not positive
definite and 0 otherwise.
For example, eigenvalue complementarity may be checked by typing
  
 
where the structures   and
  and   contain computed solutions of
an SQLP. The routine blkeig.m is in the
sdppack directory since it is used by the main routines.
  contain computed solutions of
an SQLP. The routine blkeig.m is in the
sdppack directory since it is used by the main routines.
 and
  and   from the block
vectors x and z
(see (2)).  The calling sequence
is
  from the block
vectors x and z
(see (2)).  The calling sequence
is
  
 
where x and z are block vectors with block sizes given by the vector blk, and the output vectors x0 and z0 have entries consisting of the first entries of each block of x and z respectively.
  
 
where x is the block vector, blk is the vector of block sizes, v is the vector on the right-hand side of (8) and dist is the minimum entry in v (possibly negative or zero, if x is outside the quadratic cone or on its boundary. Using this routine together with qcfirst.m, one can conveniently check strict complementarity for the quadratic part of an SQLP, explicitly displaying the pairs of vectors in (7) and (8) by
[x0,z0] = qcfirst(X.q,Z.q,blk.q); [distx,vx] = qcpos(X.q,blk.q); [distz,vz] = qcpos(Z.q,blk.q); [ x0 vz ] % check one complementary pair (x=0, z on boundary) [ z0 vx ] % check other complementary pair (z=0, x on boundary)This routine is in the sdppack directory since it is used by the main routines.
  
 
This routine is called only by sqlcond.m.
  
 
This routine is called only by sqlcond.m.
  
 
where tol is a tolerance
(e.g.   ) used to determine the rank of
 ) used to determine the rank of
  .
 .
 , the semidefinite part of the primal linear constraints.
The calling sequence is
 , the semidefinite part of the primal linear constraints.
The calling sequence is
  
 
where blk.s is as above and Amat is a
cell array storing the block diagonal matrices   (see Section 3.1).
 
(see Section 3.1).
The package also provides routines to create a variety of
randomly generated test problems.  There is also a routine to create SQLP's
with solutions having prescribed properties.
These routines are discussed below.
generated test problems.  There is also a routine to create SQLP's
with solutions having prescribed properties.
These routines are discussed below.
 defining a diagonally constrained SDP (see
Section 5.1), stored in
  defining a diagonally constrained SDP (see
Section 5.1), stored in   and
  and   respectively.
The script dinit.m must be called to initialize the variables to
default (and generally infeasible) values, before calling the specialized
routines dsdp.m or fdsdp.m to solve the diagonally
constrained SDP (see Section 5.1).
This routine is in the special subdirectory.
  respectively.
The script dinit.m must be called to initialize the variables to
default (and generally infeasible) values, before calling the specialized
routines dsdp.m or fdsdp.m to solve the diagonally
constrained SDP (see Section 5.1).
This routine is in the special subdirectory.
 function.
The script linit.m must be called to initialize the variables to
default (and generally infeasible) values, before calling the specialized
routines lsdp.m or flsdp.m to solve the SDP which
defines the Lovász
  function.
The script linit.m must be called to initialize the variables to
default (and generally infeasible) values, before calling the specialized
routines lsdp.m or flsdp.m to solve the SDP which
defines the Lovász   function (see Section 5.2).
This routine is in the special subdirectory.
  function (see Section 5.2).
This routine is in the special subdirectory.
  
 
and the ``primal" is
  
 
where the vectors   and
  and   are of length d and the vector
y is of length M (so the matrices
  are of length d and the vector
y is of length M (so the matrices   have size
M by d).  The routine converts this to a
quadratically constrained linear program expressed in SQLP format,
so it can then be solved by sql.m.  This provides an
interesting class of problems, since the blocks in the resulting block
vector
  have size
M by d).  The routine converts this to a
quadratically constrained linear program expressed in SQLP format,
so it can then be solved by sql.m.  This provides an
interesting class of problems, since the blocks in the resulting block
vector   must always be on the cone boundary at the solution,
i.e. with the right-hand component of (7) always zero.
See the comments in the code for further details.
This routine is in the special subdirectory.
  must always be on the cone boundary at the solution,
i.e. with the right-hand component of (7) always zero.
See the comments in the code for further details.
This routine is in the special subdirectory.
 .  The field rx.q is a vector
of values, giving a number 0, 1 or 2 for each block of
 .  The field rx.q is a vector
of values, giving a number 0, 1 or 2 for each block of   ,
specifying, respectively, whether the corresponding block of the
solution
 ,
specifying, respectively, whether the corresponding block of the
solution   is to be zero, a nonzero vector on the boundary of
the quadratic cone,
or a vector in the interior of the quadratic cone.  The scalar
rx.l specifies the desired number of nonzero components in
the solution vector
  is to be zero, a nonzero vector on the boundary of
the quadratic cone,
or a vector in the interior of the quadratic cone.  The scalar
rx.l specifies the desired number of nonzero components in
the solution vector   .  The structure rz with fields
rz.s, rz.q and rz.l specifies
the corresponding information for the dual solution (
 .  The structure rz with fields
rz.s, rz.q and rz.l specifies
the corresponding information for the dual solution (  ,
 ,  ,
 ,  ).
This routine is useful for creating test problems for which the
strict complementarity or primal and dual nondegeneracy conditions
do not hold.  However, the prescribed rank structures must not
violate the complementarity conditions.
See the comments in the routine for further explanation.
 ).
This routine is useful for creating test problems for which the
strict complementarity or primal and dual nondegeneracy conditions
do not hold.  However, the prescribed rank structures must not
violate the complementarity conditions.
See the comments in the routine for further explanation.
In addition, scripts sql2sdp and sdp2sql convert SDP's in SQLP format to the SDP format required by SDPpack Version 0.8 and vice versa, and sql2qc and qc2sql likewise convert QCLP's from SQLP format to a QCLP-only format and vice versa.
 
  
  
 