Main Content

Specify LMI System at the Command Line

This example shows how to specify LMI systems at the command line using the LMI Lab tools.

Consider a stable transfer function,

G(s)=C(sI-A)-1B.

Suppose that G has four inputs, four outputs, and six states. Consider also a set of input/output scaling matrices D with block-diagonal structure given by:

D=(d10000d10000d2d300d4d5).

The following problem arises in the robust stability analysis of systems with time-varying uncertainty [1]. Find, if any, a scaling D with the specified structure, such that the largest gain across frequency of DG(s)D-1 is less than 1.

This problem has a simple LMI formulation: There exists an adequate scaling D if the following feasibility problem has solutions. Find two symmetric matrices XR6×6 and S=DTDR4×4 such that:

(ATX+XA+CTSCXBBTX-S)<0,

X>0,

S>1.

You can use the LMI Editor to specify the LMI problem described by these expressions, as shown in Specify LMIs with the LMI Editor GUI. This example shows how to define the problem at the command line using lmivar to declare the variables and lmiterm to specify the terms in the LMI.

For this example, use the following values for A, B, and C.

A = [  -0.8715    0.5202    0.7474    1.0778   -0.9686    0.1005;
       -0.5577   -1.0843    1.8912    0.2523    1.0641   -0.0345;
       -0.2615   -1.7539   -1.5452   -0.2143    0.0923   -2.4192;
        0.6087   -1.0741    0.1306   -2.5575    2.3213    0.2388;
       -0.7169    0.3582   -1.4195    1.7043   -2.6530   -1.4276;
       -1.2944   -0.6752    1.6983    1.6764   -0.3646   -1.7730 ];
  
B = [       0    0.8998   -0.2130    0.9835;
            0   -0.3001         0   -0.2977;
      -1.0322         0   -1.0431    1.1437;
            0   -0.3451   -0.2701   -0.5316;
      -0.4189    1.0128   -0.4381         0;
            0         0   -0.4087         0];
 
C = [      0    2.0034         0    1.0289    0.1554    0.7135;
      0.9707    0.9510    0.7059    1.4580   -1.2371    0.3174;
           0         0    1.4158    0.0475   -2.1935    0.4136;
     -0.4383    0.6489   -1.6045    1.7463   -0.3334   -0.5771];

Initialize LMI System

To describe an LMI system, begin by using setlmis to initialize the system.

setlmis([]) 

Specify LMI Variables

The LMI system of this example has matrix variables X and S. Declare these variables using lmivar. This command takes inputs that specify the structure of the matrix variable. In this problem, both variables X and S are symmetric matrices, denoted Type 1 for specifying with lmivar. Specify X as a single full symmetric block of size 6.

X = lmivar(1,[6 1]); 

Because S=DTD, the matrix variable S inherits the block-diagonal structure of D.

S=[s10000s10000s2s300s3s4].

Specify S with this structure: two diagonal blocks, where the first is a 2-by-2 scalar block and the second is a full symmetric block.

S = lmivar(1,[2 0;2 1]);

For more details on how to specify block structure of matrix variables, see lmivar.

The identifiers X and S are integers corresponding to the ranking of X and S in the list of matrix variables, in the order of declaration. Here, their values are X = 1 and S = 2. These identifiers still point to X and S after deletion or instantiation of some of the matrix variables.

Specify LMI Terms

After declaring the matrix variables with lmivar, you specify the term content of each LMI. LMI terms fall into three categories:

  • Constant terms, fixed matrices like I in the LMI S > I.

  • Variable terms, which involve a matrix variable. Variable terms are of the form PXQ where X is a variable and P and Q are fixed matrices called the left and right coefficients, respectively.

  • The outer factors that multiply the matrices in the LMI.

For the LMIs of the system of this example, specify the terms of the LMIs one at a time using lmiterm. This example describes the use of lmiterm for specifying the terms in the three LMIs of this problem. For more details about the syntax for specifying terms, see lmiterm.

In the first LMI, on the left-hand side, the first two terms of the (1,1) position are a conjugate pair of the form ATX+XA. The following command specifies these terms.

BRL = newlmi;
lmiterm([BRL 1 1 X],1,A,'s');

The first argument, the vector [BRL 1 1 X], encodes information about this LMI term.

  • The first entry indicates to which LMI the term belongs. The value BRL means “left (smaller) side of the LMI with identifier BRL.”

  • The second and third entries identify the block to which the term belongs. The values [1 1] for these entries indicates that the term is attached to the (1,1) block.

  • The last entry indicates which matrix variable is involved in the term.

The second and third arguments of lmiterm contain numerical data, which include values of the constant term, outer factor, or matrix coefficients. The values 1,A specify the left coefficient I and the right coefficient A of the term XA. Finally, the flag 's' specifies the conjugated form of this term, ATX+XA.

The next term of the (1,1) position is CTSC. Specify this term with variable S and coefficients C' and C.

lmiterm([BRL 1 1 S],C',C); 

Next, specify the term in the (1,2) position. Because of the symmetry of the matrix, specifying (1,2) automatically specifies (2,1).

lmiterm([BRL 1 2 X],1,B); 

Finally, specify term (2,2), -S.

lmiterm([BRL 2 2 S],-1,1);

The second LMI in the system is X>0. lmiterm assumes that the smaller term is on the left. Therefore, specify this LMI as 0<X. It is not necessary to specify an LMI term whose value is zero, so specifying the right-hand-side as X fully specifies this LMI.

% 2nd LMI
Xpos = newlmi;
lmiterm([-Xpos 1 1 X],1,1);

For the third LMI, again rewrite it to put the smaller term on the left, 1<S. Specify this LMI.

% 3rd LMI
Slmi = newlmi;
lmiterm([-Slmi 1 1 S],1,1); 
lmiterm([Slmi 1 1 0],1);

Throughout these specifications, the identifiers X and S point to the variables X and S. The tags BRL, Xpos, and Slmi point to the first, second, and third LMI in the system, respectively. Note that -Xpos refers to the right-hand side of the second LMI. Similarly, -X indicates transposition of the variable X.

When the LMI system is completely specified, get the internal representation of the problem.

LMISYS = getlmis;

Use getlmis only once, after declaring all matrix variables and LMI terms. getlmis returns the internal representation LMISYS of the LMI system. You can pass LMISYS to other LMI Lab functions, such as feasp, for subsequent processing.

References

[1] Shamma, J.S. “Robustness Analysis for Time-Varying Systems.” In [1992] Proceedings of the 31st IEEE Conference on Decision and Control, 3163–68. Tucson, AZ, USA: IEEE, 1992. https://doi.org/10.1109/CDC.1992.371245.

See Also

| | |

Related Topics