Main Content


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:

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

termID (1)={+pp

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.

termID(2:3)={[0,0] for outer factors[i,j] for terms in the (i,j)-th block of the left or right inner factortermID(4)={0 for outer factorsx for variable terms AXB-x for variable terms AXTB

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


variable term


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


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.


collapse all

Consider the LMI


where X1, X2 are matrix variables of Types 2 and 1, respectively, and x3 is a scalar variable (Type 1).

After you initialize the LMI description using setlmis and declare the matrix variables using lmivar, specify the terms on the left side of this LMI.

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, and x3 are the variable identifiers returned by lmivar when you declare the variables.

Similarly, specify the term content of the right side.

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.

Version History

Introduced before R2006a