Create LMI variables

Given an IQC-problem (i.e. an instance of the class iqcprob you can easily define new LMI variables by means of the class iqcvar. This proceeds by specifying

X=iqcvar(iqcprob,dim,type)

where

  • iqcprob is the LMI problem as an instance of the class iqcprob
  • dim is the dimension of the variable (i.e., [dim1,dim2])
  • type is the type of variable (i.e., ‘symmetic’, ‘full’,’skew’)

Each variable has four properties: var, nvar, svar, and Parser. Here the first three entries correspond to the output of the MATLAB function [X,Xn,sX]=lmivar(type,struct), which specify the name, number, and structure of an LMI variable in LMIlab.

The advantage of the function iqcprob is that it has the same convenient interface as Yalmip has, while it is compatible with both LMI parser (i.e. LMIlab and Yalmip). Indeed, the class iqcvar supports a selective range of operations as summarized next:

OperationDescription
Horizontal concatenationX_\mathrm{new}=[X_1,X_2,\ldots,X_N]
Vertical concatenationX_\mathrm{new}=[X_1;X_2;\ldots;X_N]
Transposition (real)X_\mathrm{new}=X^T
NegationX_\mathrm{new}=-X
Multiplication by identityX_\mathrm{new}=xI_N with scalar variable x
Block-diagonal concatenation X_\mathrm{new}=\mathrm{blkdiag}(X_1,X_2,\ldots,X_N)
Skew diagonalizationX_\mathrm{new}= \left(\begin{array}{cc}0&X\\X^T&0\end{array}\right)
Kronecker productX_\mathrm{new}=kron(x,y)=x\otimes y

Here either x is a matrix whose entries are in \{-1,0,1\}, while y is an LMI variable, or y is a matrix whose entries are \{-1,0,1\}, while x is an LMI variable.
DiagonalizationX_\mathrm{new}=\mathrm{diag}(X)

This either takes the diagonal element of a square matrix returned as a vector, or it turns a vector into a diagonal matrix, where all the off-diagonal elements are zero.
SubindexingX_\mathrm{new}=X(a:b,c:d)

This selects a subset of elements of an LMI variable X, which are returned as a new LMI variable X_\mathrm{new}.

Note:

  • New operations can always be added
  • The operations addition, subtraction, multiplication, and division by a matrix are currently not supported by this class. This will be aimed for in a future release.

Previous page, Next page