Specify term content of LMIs

lmiterm(termID,A,B,flag)

`lmiterm`

specifies the
term content of an LMI one term at a time. Recall that *LMI
term* refers to the elementary additive terms involved in
the block-matrix expression of the LMI. Before using `lmiterm`

,
the LMI description must be initialized with `setlmis`

and
the matrix variables must be declared with `lmivar`

.
Each `lmiterm`

command adds one extra term to the
LMI system currently described.

LMI terms are one of the following entities:

outer factors

constant terms (fixed matrices)

variable terms

*AXB*or*AX*^{T}*B*where*X*is a matrix variable and*A*and*B*are given matrices called the term coefficients.

When describing an LMI with several blocks, remember to specify **only the terms in the blocks on or below the diagonal** (or
equivalently, only the terms in blocks on or above the diagonal).
For instance, specify the blocks (1,1), (2,1), and (2,2) in a two-block
LMI.

In the calling of `lmiterm`

, `termID`

is
a four-entry vector of integers specifying the term location and the
matrix variable involved.

$$\text{termID}(1)=\{\begin{array}{c}+\text{p}\\ -\text{p}\end{array}$$

where positive p is for terms on the *left-side* of
the *p*-th LMI and negative p is for terms on the *right-side* of
the *p*-th LMI.

Recall that, by convention, the left side always refers to the
smaller side of the LMI. The index `p`

is relative
to the order of declaration and corresponds to the identifier returned
by `newlmi`

.

$$\begin{array}{l}\text{termID}(2:3)=\{\begin{array}{l}\left[\text{0,0}\right]\text{forouterfactors}\hfill \\ [i,j]\text{fortermsinthe}(i,j)\text{-thblockoftheleftorrightinnerfactor}\hfill \end{array}\\ \\ \text{termID}(4)=\{\begin{array}{l}\text{0forouterfactors}\hfill \\ \begin{array}{l}x\text{forvariableterms}AXB\\ -x\text{forvariableterms}A{X}^{T}B\end{array}\hfill \end{array}\end{array}$$

where `x`

is the identifier of the matrix variable `X`

as
returned by `lmivar`

.

The arguments `A`

and `B`

contain
the numerical data and are set according to:

Type of Term | A | B |
---|---|---|

outer factor | matrix value of | omit |

constant term C | matrix value of | omit |

variable term
| matrix value of (1 if | matrix value of (1 if |

Note that identity outer factors and zero constant terms need not be specified.

The extra argument `flag`

is optional and concerns
only conjugated expressions of the form

(*AXB*) + (*AXB ^{T}*)
=

in *diagonal blocks*. Setting ```
flag
= 's'
```

allows you to specify such expressions with a single `lmiterm`

command.
For instance,

lmiterm([1 1 1 X],A,1,'s')

adds the symmetrized expression *AX* + *X ^{T}*

lmiterm([1 1 1 X],A,1) lmiterm([1 1 1 -X],1,A')

Aside from being convenient, this shortcut also results in a more efficient representation of the LMI.

Consider the LMI

$$\left(\begin{array}{cc}2A{X}_{2}{A}^{T}-{x}_{3}E+D{D}^{T}& {B}^{T}{X}_{1}\\ {X}_{1}^{T}B& -I\end{array}\right)<{M}^{T}\left(\begin{array}{cc}C{X}_{1}{C}^{T}+C{X}_{1}^{T}{C}^{T}& 0\\ 0& -f{X}_{2}\end{array}\right)M$$

where *X*_{1}, *X*_{2} are
matrix variables of Types 2 and 1, respectively, and *x*_{3} is
a scalar variable (Type 1).

After initializing the LMI description with `setlmis`

and
declaring the matrix variables with `lmivar`

, the
terms on the left side of this LMI are specified by:

lmiterm([1 1 1 X2],2*A,A') % 2*A*X2*A' lmiterm([1 1 1 x3],-1,E) % -x3*E lmiterm([1 1 1 0],D*D') % D*D' lmiterm([1 2 1 -X1],1,B) % X1'*B lmiterm([1 2 2 0],-1) % -I

Here `X1, X2, X3`

should be the variable identifiers
returned by `lmivar`

.

Similarly, the term content of the right side is specified by:

lmiterm([-1 0 0 0],M) % outer factor M lmiterm([-1 1 1 X1],C,C','s') % C*X1*C'+C*X1'*C' lmiterm([-1 2 2 X2],-f,1) % -f*X2

Note that *CX*_{1}*C ^{T}* +

`lmiterm`

command with the
flag `'s'`

to ensure proper symmetrization.Was this topic helpful?