Course 43917 - week 2

Sigurd Skogestad ((no email))
Wed, 31 Jan 1996 15:31:40 +0100

------------------------------------------------------------------
Chapter 3
------------------------------------------------------------------

This chapter provides an introduction to MIMO systems and MIMO feedback
control. It may form the basis for a first course on multivariable
control.

3.1 Introduction
-----------------

A plant G is INTERACTIVE if its offdiagonal elements are nonzero.
It is one-way interactive if it can be rearranged to a upper or
lower triangular matrix.

For SISO systems the GAIN |Gd|/|d| is independent of the input magnitude.

Also for MIMO systems the GAIN ||Gd|| / ||d|| (where ||d|| is some norm) is
independent of the magnitude ||d||, but it DOES depend on its direction.
For example, the following inputs generally have different gain:

d = [1 0]^T, d=[0 1]^T, d = [0.71 0.71]^T, d=[0.71 -0.71]^T, etc.

(although they all have the same 2-norm, || d ||_2 = 1).

A plant is said to be ILL-CONDITIONED if the gain depends strongly on the
input direction. It is quantified by the condition number gamma(G) (which
is much larger than 1 for an ill-conditioned plant).

3.2 Transfer functions
-----------------

*** Misprints: p. 69, Feedback rule: G1 G2 should be G2 G1.
Figure 3.3: Need negative sign in feedback loop

For MIMO systems the order of the transfer functions matter, so in general
GK is not the same as KG (even when G and K are square matrices).

The main rule for evaluating transfer functions is:
Start from the output and write down the transfer
functions as you meet them going to the input. If you exit a feedback loop then
we get a term (I-L)^-1 where L is the transfer function around the loop
(gain going backwards).

Note that the order (left to right) in the block diagram and the formulas is
reversed!

The rules etc. given in this section are important and should be memorized!

3.3 MIMO frequency response
-----------------

Essentially the same as for SISO systems except for the issue of directions.

Make sure you understand the singular value decomposition.

G = U Sigma V^H

V: columns give input directions
U: columns give output directions
Sigma: Gains relating these directions

The largest singular value (smax) is the induced 2-norm.

Condition number (gamma): max. singular value / min. singular value
For a square matrix, gamma = smax(G) smax(G^-1)
so the condition number is large if the product of the largest element
in G and G^-1 is large.
Note that the condition number depends strongly on scaling.
It may be scaled (minimized) at the input or output or both.

Relative Gain Array (RGA) for square G:
RGA = Lamda(G) = G x G^-T
Useful measure - easy to compute.
The difference between RGA and I (the identity matrix) says something
about two-way interactions. But the RGA also has many other uses!
Note that our definition says nothing about decentralized control (although
the RGA is useful for decentralized control).

We have that || RGA ||_sum is approximately equal to the minimized condition
number.

****** Example MATLAB (Distillation process):

G0 = [87.8 -86.4; 108.2 -109.6];
[U,sval,V]=svd(G0) % or use: [U,sval,V]=vsvd(G0) for G freq.-varying
rga = G0.*pinv(G0.') % or use: rga = vrga(G0) - see function vrga
rgasum = sum(sum(abs(rga))) % sum-norm of RGA (sum of elements)
gamma = cond(G0) % or use: gamma = vcond(G) for G freq.-varying
gammamin = condmin(G0) % see function condmin
gammamini = condmini(G0) % see function condmini
gammamino = condmino(G0) % see function condmino

Homework: 1. Exrecise 3.4
2. Do MATLAB design examples form Chapter 2.

-----------------------------------------------------
MATLAB routines for RGA and minimized condition no.
-----------------------------------------------------

RGA. For a regular matrix use: >>rga=G.*pinv(G.')
For a frequency-varying matrix in mu-toolbox use function vrga:

function rga = vrga(Gf);
if (nargin == 0) | (nargin > 1),
disp('usage: vrga(mat)')
return
end
rga = veval('.*',Gf,vpinv(vtp(Gf)));

Minimized condition number.
May compute using upper bound on structured singular value (see Appendix).
In mu toolbox use function condmin:

function gmin = condmin(Gf)
% Minimize cond.no. with both input and output scaling
% WARNING: May be inaccurate because of inaccurate mu-calculation
[dum1,n,m,dum2]=minfo(Gf);
zero = 0*eye(n);
H = abv( sbs(zero, minv(Gf)), sbs(Gf, zero));
blk0=[1 1]; blk1=blk0;
for k=2:n
blk1 = [blk1; blk0];
end
blk2=blk1; blk=[blk1; blk2];
mu1=mu(H,blk,'Uc'); gmin1=sel(mu1,':',1);
gmin=mmult(gmin1,gmin1);

For INPUT minimized condition number use function condmini:

function gmin = condmini(Gf)
% Minimize cond.no. with input scaling
[dum1,n,m,dum2]=minfo(Gf);
zero = 0*eye(n);
H = abv( sbs(zero, minv(Gf)), sbs(Gf, zero));
blk0=[1 1]; blk1=blk0;
for k=2:n
blk1 = [blk1; blk0];
end
blk2=[n n]; blk=[blk1; blk2];
gmin1=sel(mu(H,blk,'Uc'),':',1); gmin=mmult(gmin1,gmin1);

For OUTPUT minimized condition number use function condmino:

function gmin = condmino(Gf)
% Minimize cond.no. with output scaling
[dum1,n,m,dum2]=minfo(Gf);
zero = 0*eye(n);
H = abv( sbs(zero, minv(Gf)), sbs(Gf, zero));
blk0=[1 1]; blk1=blk0;
for k=2:n
blk1 = [blk1; blk0];
end
blk2=[n n]; blk=[blk2; blk1];
gmin1=sel(mu(H,blk,'Uc'),':',1); gmin=mmult(gmin1,gmin1);