# lmiterm

Specify term content of LMIs

## Syntax

```lmiterm(termID,A,B,flag)
```

## Description

`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 AXTB 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.

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`.

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 N

matrix value of N

omit

constant term C

matrix value of C

omit

variable term

AXB or AXTB

matrix value of A

(1 if A is absent)

matrix value of B

(1 if B is absent)

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) + (AXBT) = AXB + BTX(T)AT

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 + XTAT to the (1,1) block of the first LMI and summarizes the two commands

```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.

## Examples

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 X1, X2 are matrix variables of Types 2 and 1, respectively, and x3 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 CX1CT + CX1TCT is specified by a single `lmiterm` command with the flag `'s'` to ensure proper symmetrization.