## Documentation Center |

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 *x _{n}* is
the

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*) =*x*_{n}`struct(i,j)=–n`if*X*(*i, j*) = –*x*_{n}

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 *x _{n}*

Consider an LMI system with three matrix variables *X*_{1}, *X*_{2}, *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}=where Δ is an arbitrary 5-by-5 symmetric matrix, δ

_{1}and δ_{2}are scalars, and*I*_{2}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 *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

where *X*_{1} and *X*_{2} are
2-by-3 and 3-by-2 rectangular matrices, respectively. You can specify
this structure as follows:

Define the rectangular variables

*X*_{1}and*X*_{2}bysetlmis([]) [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 = 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*X*_{2}is the seventh decision variable.Use Type 3 to specify the matrix variable

*X*and define its structure in terms of those of*X*_{1}and*X*_{2}:[X,n,sX] = lmivar(3,[sX1,zeros(2);zeros(3),sX2])

The resulting variable

`X`has the prescribed structure as confirmed bysX 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

`delmvar` | `getlmis` | `lmiedit` | `lmiterm` | `setlmis` | `setmvar` | `skewdec`

Was this topic helpful?