Specify matrix variables in LMI problem
X = lmivar(type,struct) [X,n,sX] = lmivar(type,struct)
The first argument type selects among available types of variables and the second argument struct gives further information on the structure of X depending on its type. Available variable types include:
type=1: Symmetric matrices with a block-diagonal structure. Each diagonal block is either full (arbitrary symmetric matrix), scalar (a multiple of the identity matrix), or identically zero.
If X has R diagonal blocks, struct is an R-by-2 matrix where
struct(r,1) is the size of the r-th block
struct(r,2) is the type of the r-th block (1 for full, 0 for scalar, –1 for zero block).
type=2: Full m-by-n rectangular matrix. Set struct = [m,n] in this case.
type=3: Other structures. With Type 3, each entry of X is specified as zero or ±x where xn is the n-th decision variable.
Accordingly, struct is a matrix of the same dimensions as X such that
struct(i,j)=0 if X(i, j) is a hard zero
struct(i,j)=n if X(i, j) = xn
struct(i,j)=–n if X(i, j) = –xn
Sophisticated matrix variable structures can be defined with Type 3. To specify a variable X of Type 3, first identify how many free independent entries are involved in X. These constitute the set of decision variables associated with X. If the problem already involves n decision variables, label the new free variables as xn+1, . . ., xn+p. The structure of X is then defined in terms of xn+1, . . ., xn+p as indicated above. To help specify matrix variables of Type 3, lmivar optionally returns two extra outputs: (1) the total number n of scalar decision variables used so far and (2) a matrix sX showing the entry-wise dependence of X on the decision variables x1, . . ., xn.
Consider an LMI system with three matrix variables X1, X2, X3 such that
X1 is a 3-by-3 symmetric matrix (unstructured),
X2 is a 2-by-4 rectangular matrix (unstructured),
where Δ is an arbitrary 5-by-5 symmetric matrix, δ1 and δ2 are scalars, and I2 denotes the identity matrix of size 2.
These three variables are defined by
setlmis() X1 = lmivar(1,[3 1]) % Type 1 X2 = lmivar(2,[2 4]) % Type 2 of dim. 2x4 X3 = lmivar(1,[5 1;1 0;2 0]) % Type 1
The last command defines X3 as a variable of Type 1 with one full block of size 5 and two scalar blocks of sizes 1 and 2, respectively.
Combined with the extra outputs n and sX of lmivar, Type 3 allows you to specify fairly complex matrix variable structures. For instance, consider a matrix variable X with structure
where X1 and X2 are 2-by-3 and 3-by-2 rectangular matrices, respectively. You can specify this structure as follows:
setlmis() [X1,n,sX1] = lmivar(2,[2 3]) [X2,n,sX2] = lmivar(2,[3 2])
The outputs sX1 and sX2 give the decision variable content of X1 and X2:
sX1 sX1 = 1 2 3 4 5 6 sX2 sX2 = 7 8 9 10 11 12
For instance, sX2(1,1)=7 means that the (1,1) entry of X2 is the seventh decision variable.
[X,n,sX] = lmivar(3,[sX1,zeros(2);zeros(3),sX2])
The resulting variable X has the prescribed structure as confirmed by
sX sX = 1 2 3 0 0 4 5 6 0 0 0 0 0 7 8 0 0 0 9 10 0 0 0 11 12