lmivar

Specify matrix variables in LMI problem

Syntax

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

Description

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.

Examples

collapse all

Consider an LMI system with three matrix variables ${X}_{1}$, ${X}_{2}$, and ${X}_{3}$ such that

• ${X}_{1}$ is a 3-by-3 symmetric matrix (unstructured),

• ${X}_{2}$ is a 2-by-4 rectangular matrix (unstructured),

• ${X}_{3}$ =

$\left(\begin{array}{ccc}\Delta & 0& 0\\ 0& {\delta }_{1}& 0\\ 0& 0& {\delta }_{2}{I}_{2}\end{array}\right),$

where Δ is an arbitrary 5-by-5 symmetric matrix, ${\delta }_{1}$ and ${\delta }_{2}$ are scalars, and ${I}_{2}$ denotes the identity matrix of size 2.

Define these three variables using lmivar.

setlmis([])
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 ${X}_{3}$ 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:

$X=\left(\begin{array}{cc}{X}_{1}& 0\\ 0& {X}_{2}\end{array}\right)$

where ${X}_{1}$ and ${X}_{2}$ are 2-by-3 and 3-by-2 rectangular matrices, respectively. Specify this structure as follows.

Define the rectangular variables ${X}_{1}$ and ${X}_{2}$.

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 ${X}_{1}$ and ${X}_{2}$.

sX1
sX1 = 2×3

1     2     3
4     5     6

sX2
sX2 = 3×2

7     8
9    10
11    12

For instance, sX2(1,1) = 7 means that the (1,1) entry of ${X}_{2}$ 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 ${X}_{1}$ and ${X}_{2}$.

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

Confirm that the resulting X has the desired structure.

sX
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 