Main Content


Specify matrix variables in LMI problem


X = lmivar(type,struct)
[X,n,sX] = lmivar(type,struct)


lmivar defines a new matrix variable X in the LMI system currently described. The optional output X is an identifier that can be used for subsequent reference to this new variable.

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.


collapse all

Consider an LMI system with three matrix variables X1, X2, and X3 such that

  • X1 is a 3-by-3 symmetric matrix (unstructured),

  • X2 is a 2-by-4 rectangular matrix (unstructured),

  • X3 =


where Δ is an arbitrary 5-by-5 symmetric matrix, δ1 and δ2 are scalars, and I2 denotes the identity matrix of size 2.

Define these three variables using lmivar.

X1 = lmivar(1,[3 1]);          % Type 1 
X2 = lmivar(2,[2 4]);         % Type 2 of dimension 2-by-4 
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 given by:


where X1 and X2 are 2-by-3 and 3-by-2 rectangular matrices, respectively. Specify this structure as follows.

Define the rectangular variables X1 and X2.

[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 = 2×3

     1     2     3
     4     5     6

sX2 = 3×2

     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.

Next, use Type 3 to specify the matrix variable X, and define its structure in terms of the structures of X1 and X2.

[X,n,sX] = lmivar(3,[sX1,zeros(2);zeros(3),sX2]);

Confirm that the resulting X has the desired structure.

sX = 5×5

     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

Version History

Introduced before R2006a