Specify term content of LMIs
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:
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
outer factor N
matrix value of N
constant term C
matrix value of C
AXB or AXTB
matrix value of A
(1 if A is absent)
matrix value of B
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.
Consider the LMI
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.