S.Skogestad and I.Postlethwaite: "Multivariable feedback control"
(1996).
Errors, misprints and comments from the authors.
Listed below are some errors.
- p. 35. Reference to (A.95) should be to (A.136).
- p.74, before eq. (3.41). It should say: ... and the smallest gain
for any input direction, excluding for the case
with more inputs than outputs the ``wasted'' inputs in the nullspace of G,
is equal to the minimum singular value. (Without this restriction, we
can always for a "fat" matrix choose a nonzero input d in the nullspace
of G such that Gd=0).
- p.84, eq. (3.64). The signs in the last column of V should be
changed. The same applies to v_underbar two lines below.
- p.89, below eq. (3.71). It should say: We prefer ...
RGA-numbers ... close to zero (and not close to 1).
(But a RGA-number close to 0
requires the diagonal elements in the RGA-matrix to be close to 1; so
we would like to "pair on" RGA-elements close to 1).
- p. 111, Exercise 3.22, part (c). The statement that
the smallest singular value of the lower triangular matrix is
less than 2^-m is not true.
- p. 119 MATLAB code in Table 4.1 . Replace
sqrt(R) by the command sqrtm(R) (three places).
- p. 124 Example 4.5 on state controllability of tanks in series .
The responses in the states (Figure 4.1b) will remain within +- 1 (and not
continue rising) after t=400 s when we set T0=0.
Note 2 should therefore be modified to:
Although the states (tank temperatures) are indeed at their desired values
of +-1 at t=400s, it is not possible to hold them at these values, since at
steady-state all the states must be equal.
- p. 152, H2-norm (MISPRINTS). In the paragraph following (4.118), ||G(s)||^2 should be replaced by ||G(s)||_2 (i.e., subscipt 2 instead of superscript). Furthermore, eq. (4.119) should be deleted, as we should not
take the max over impulses, but rather the sum as described in the paragraph above.
- p. 174, Section 5.6.1 on Inverse response for SISO system:
It is not
generally true that the step response for a SISO system with n_z RHP-zeros
crosses zero n_z times
(counterexamples exist for systems with complex
RHP-zeros), but
it is true that a SISO system with
n_z REAL RHP-zeros crosses zero AT LEAST n_z times.
- p.196, line 3 in Example 5.8: Replace \tau by \theta in the
approximation for w_u (should be: \w_u \approx (\pi/2)/\theta).
- p. 210, Exercise 5.8: Disregard the hint.
- p. 217, 6th line. It should say that B_p^{-1} and B_z^{-1} (i.e.
the inverses )
are stable all-pass transfer matrices.
- p. 220, Exercise 6.1: The elements of S are of magnitude
1/(k * theta + 2) (not k/(2 * k + theta)).
- p. 225, top equation (unnumbered): G_90(s) has wrong sign.
- p. 232, line 3. Delete "or use of feedforward control" (since the input
usage is the same with feedback or feedforward control).
- p.242, Example 6.7: The worst-case peak computed using skewed-mu
is 14.5 (and not 14.2). Also see the MATLAB file
Expl6_7.m
- p. 251, Exercise 6.15: Interchange elements in last row of
G(s), i.e. G = [c+(1/s) 1/s;1/s c+(1/s)]; (here c is a constant, e.g.
c=1).
- p. 311, Example 8.5 : The perturbation matrix in (8.72)
should be Delta = [0.2 -0.1; 0.2 -0.1] (i.e. take the transposed)
- p. 318, Exercise 8.17: should be d = sqrt(|b|/|a|)
instead of d = sqrt(|a|/|b|).
- p. 318, Exercise 8.19. "Answers: Yes and No" should be "Answers: No and No"
- p. 368, eq. (9.49) should be reordered to: -F_inf (sI-A_inf)^(-1) Z_inf L_inf
- p. 376, four lines from bottom, change to: "to either have
the same number of unstable poles or the same number of unstable (RHP)
zeros."
- p. 382, below eq. (9.98), sign error: Replace
Re(lambda[A+B*Fbar]) by
Re(lambda[A-B*Fbar]).
- p. 389, Table 9.3. Change Matlab command sqrt to sqrtm (4 places)
- p. 431: Replace -0.54 by 0.54 (delete a minus-sign) in four places:
line 10 (two places), line 13 and Eq.(10.35).
- p. 437. Theorem 10.3 is not correct (unfortunately). See p.510 below.
- p. 453, after (11.17). ... balanced residualization
preserves the steady-state gain... (not truncation).
- p. 456, in line below (11.30): The term sigma_{k+1} should be deleted.
That is, the correct is that delta is less than or equal to
sigma_{k+l+1} + ... + sigma_n. This means that the H-infinity norm in
(11.29) is bounded by "the tail" - with the first deleted singular value
sigma_{k+1} counted only once (even when it is repeated (l>1)).
- p.466, Table 11.3 (MATLAB commands for unstable system).
There is an error in the MATLAB command
for the Hankel norm approx. of stable part. It should read:
[sysb,hsig]=sysbal(syss); sys1=hankmr(sysb,hsig,ks,'d');
- p. 493, line 23. y1(t)<=0.5 should be y2(t)<=0.5.
- p. 503 (SVD), 6th line from the bottom: Should be V' = V S.
(in words, the result says that we may rotate the phase of all elements
in the input singular vector if we rotate the elements in corresponding
output singular vector by the same amount; see also (A.53).
In the nonsquare case, we may in addition rotate with a unitary matrix
the space corresponding to the extra inputs or outputs. E.g. if A has
two extra "inputs", so V has 2 extra columns, we may rotate with a
2x2 unitary matrix the two extra columns in V. In fact, if some of the
singular values are zero we may "rotate" the entire nullspace; see (A.53))
- p. 510 and p. 437 (Thm. 10.3): it is not
correct that RGA(G)=I implies that G is triangular.
As an counterexample consider the matrix
>> g = [1 1 0 0; 0 1 1 1; 1 1 1 0; 0 0 1 1] which has RGA=I.
(The counterexample is from Johnson and Shapiro (1986) and is based on
discussion they had with Ed Bristol; thanks to Vinay Kariwala for pointing
this counterexample out to us). One may think this is a constructed example that may never happen in
practice, but (unfortunately) this is not the case as seen from a simple realistic process example
that I have constructed.
Here is a
simulink-file for the process.
- p. 511, (A.78): For a 4x4 matrix, the conjectured upper bound
||RGA||_sum +2 on the mimimized condition number cond*(G) is not correct (thanks to Vinay Kariwala for pointing this out). This is clear from the results of Q.Liang ("Is the Relative Gain Array a Sensitivity Measure?", Proc. IFAC Workshop on interactions between process design and process control, London 1992, pp. 133-138).
Liang provides the following counterexample:
G = [1 -1 -1 1;1 1 1 1;1 1 -1 -1;1 -1 1 -1]*diag([20 19 2 1])*[1 1 1 -1;-1 1 1 1;1 -1 1 1; 1 1 -1 1];
which has cond*(G) = 20, but ||RGA||_sum = 19.05.
Generally, Liang shows that the value of cond*(G) can be much larger than ||RGA||_sum +2 if the ratio of the 2nd and 3rd singular value of G is large.
This give rise to the following counterexample which is even more striking:
G = [1 -1 -1 1;1 1 1 1;1 1 -1 -1;1 -1 1 -1]*diag([k k 1 1])*[1 1 1 -1;-1 1 1 1;1 -1 1 1; 1 1 -1 1];
It has cond*(G) = k (which can be arbitrary large), but for any k all RGA-elements are 0.25 so ||RGA||_sum = 4.
Here are some less serious misprints.
- p. 23, last equation: Replace K by K_r.
- p. 34, Eq. (2.40): Replace > by >= (greater or equal)
- p. 85, 3rd line: Delete the transpose (T).
- p. 89, three lines below (3.71): Delete shaping,
- p. 96, 2nd line from bottom: Delete
IndexRouth Hurwitz stability test .
- p. 134, in 4.6.2 item 1: Delete Kailath).and
- p. 148, Figure 4.8: Typical Nyquist plot of det(I+L) (NOT 1+detL)
- p. 151, in Remark 5: ... made following Theorem 4.9...
- p. 195, section 5.13.2, 2nd line: (G_d - r) should be (G_d d - r).
- p. 214, 2nd equation. The cos^-1 (arccos) should be taken on the "whole ting" including the denominator (as in A.113)
- p. 325, First equation, The hat on the singular value of Delta_P should be deleted
- p. 332 (Table 8.1) and p. 339 (Table 8.2): Change ydel to udel
two places in the Matlab program (the program works OK as it is, but
this gives consistency with Figure 8.1).
- p. 337, Remark 1. The implication in paranthesis should point to the left (and not to the right), that is, it should read: "The suffiency of (8.50) (\Leftarrow) also..."
- p. 339 (Matlab code in Table 8.2). Interchange ydel and udel.
- p. 343, last line. A12 should be A22.
- p. 347, eq. (8.151). Change last \beta_2 to \beta^2
- p. 347, 4 lines below eq. (8.153). Change F_l(N,Delta) to F_u(N,Delta).
- p. 365, Eq. (9.29) + line before (9.32). F(jw)F(jw)^T should be tr(F(jw)F(jw)^H).
- p. 387, 4 lines below (9.82). (3,3) block should be (3,2) block.
- p. 388, 3 lines above (9.88). Also replace rhoDs by rhoWoDs.
- p. 416, Delete the last part of eq. (10.21),i.e. delete r2=u1hat.
- p. 416-417. Replace u2 by u in Fig. 10.3(a), Fig. 10.4 and in eq. (10.21).
- p. 446, Figure 10.12: Labels y1 and y2 should be exchanged
- p. 484. Two places just before Remark: Max.singular value (sigma-overbar) should be min.singular value (sigma-underbar).
- p. 487, line 10. WpWaWb should be WpWaWg.
- p. 544, Paper by Postlethwaite, Samar,... (1995). Page reference
should be 3881-3886.
- p. 546, Book by Stephanopoulos is from 1984 (not 1989).
Finally, here some comments from the authors
These are things we would probably add or change in a
possible next edition, but they are not so serious that
we would label them as ``errors''.
- p.5 (Definition 1.1 of properness): To include time delays it would
be better to replace s by jw in this definition and let w go to infinity
(a pure delay should be semiproper and not strictly proper).
- p.30 (text for Fig. 2.10): The sum for the total variation (TV) is
of course from i=1 to infinity.
- p. 83 (item 1 on selecting weight Wu for H-infinity control):
Since we usually require tight control
at low frequencies, input usage is unavoidable at low frequencies.
Therefore, there may be no reason to penalize the inputs at low frequencies,
so we often use a weight of the form Wu = s/(s+w1), where the frequency w1 is
adjustable.
- p. 111 (Exercise 3.21) Do the singular values
bound the magnitude of the elements of the matrix? To help answering
this question consider the matrix A=[3 2; 1 -1] (with singular values
3.62 and 1.38).
- p. 218, in the proof of (6.18) ( Sensitivity peak with combined
RHP poles and zeros). Actually, Boyd and Desoer (1985) did
not prove (6.18), but rather a weaker version with the sine term deleted.
Chen (1995) derives a formula which is improved compared to
(6.18), but his additional factor involving Q(z) is a bit difficult to evaluate.
- p. 267, Example 7.5 (Gain uncertainty kmin < k < kmax ). The mean
gain and relative uncertainty in the gain are defined as
kbar = (kmax + kmin)/2;
rk = (kmax - kmin) / (kmax+kmin)
- p. 316, eq. 8.94 (Mu-inequality): To show that this inequality
does not hold for any structure of Delta you may as a counterexample
(see Exercise 8.21) consider A = [1 10; 0 1], B = [0 1; 10 1].
- p. 317 (Properties of mu). Note that
mu (a a a; b b b; c c c) = |a| + |b| + |c| for diagomal Delta.
Also note that for a diagonal Delta we may "move" any scalar from
a column to the corrsponding row (or vice versa), see (8.84).
- p. 333 (proof of (8.135)): The last two lines of the proof are
difficult to follow; see Zhou et al. (1996) p. 293-295 for
more details.
- Section 8.12 on Mu-synthesis using DK-iteration should
probably be moved to the end of Chapter 9.
- p.422 (Partial control).
Measurement noise should be included in the feedback, i.e.
write u_2 = K_2 (r_2 - y_2 - n_2). We should then replace
r_2 in (10.30) by (r_2 - n_2). Also, we should include a
block diagram
of equations in (10.28) and (10.29) and the above feedback euqtion.
- p. 422 (Section 10.7 on partial control).
The ordering in Chapter 10 is probably
not the best, and it would probably be better if
Section 10.2 on Measurement selection for indirect control
(pp. 406 - 408) was moved to the end of Section 10.7 (p. 431) as subsection
10.7.4 Indirect Control .
The results
in (10.9) would then follow easily as a special case (10.32)
provided we also take into account measurement noise on y_2, so
that r_2 in (10.32) is replaced by (r_2 - n_2).
Proof: (10.9) is a special case of (10.32) if we do the following:
Set z=y_1, z_r=r_1, y=y_2, e=-n_2 (control error caused be measurement error),
and select r_2 such that r_1 = P_r r_2 (this implies that by
controlling y_2=r_2 we achieve (indirectly) y_1=r_1 for the case
when d=0 and n_2=0).
Note that in (10.9) we should scale P_r with respect to the control error
(n_2) and NOT with respect to r_2 (as we may do when considering true partial
control).
- p. 429 (true partial control). For the case when G is square
(and thus G_11 and G_22 are square), Eq. (10.33) may be generalized to the
case with several (n_u) uncontrolled outputs and several (n_u) unused inputs
(see Zhao, Ph.D. thesis, Norwegian Univ. of Science and Technology, 1996):
P_d = ( [G^-1]_{unused,uncontrolled )^-1 [G^-1 G_d]_{unused}
This may be derived from (10.32) by use of the Schur complement things in
(A.7).
- p. 439 (Pairing Rule 2) Change to: FOR A STABLE PLANT avoid... (this
is just to clarify since the whole section assumes stable plant)
- p. 466 (Model reduction with MATLAB).
WARNING. Be careful with the command
sysbal from the Mu-toolbox - it does not work on unstable systems - and
usually provides no warnings. You may consider using ohklmr from the
Robust control toolbox instead - it works for both stable and unstable
systems.
- p. 498 (before A.1.1 - Matrix square root): A Hermitian matrix A is said to be
positive definite if x^H A x > 0 for any nonzero vector x;
this is denoted A > 0. Similarly, it is positive semi-definite (A >=
0) if x^H A x >= 0 for any nonzero vector x.
For a positive semi-definite matrix A, we define the matrix square root
as the positive semi-definite matrix A^(1/2) which satisfies
A^(1/2) A^(1/2) = A. (Note that the term positive and the matrix square
root are only defined for a Hermitian matrix).
- p. 502 ( Property 13 of eigenvalues). A Hermitian matrix
(with A=A^H) is positive definite if and only if all its
eigenvalues are real and positive. ( Remark.
A prererquisite for classifying a matrix as positive or negative
(definite), is that it is Hermitian so this is a
clarification rather than a correction).
- p. 509 (eq. (A.73) and (A.74): D_I is here actually the inverse of the
D_I used in (A.69).