# 1. Errors/ misprints/ clarifications

### In all printings (both original (2005) and second printing (Dec. 2006/Feb. 2007)):

• p. 30 (footnote) and p. 65 (Exercise 2.5) (MISPRINT). The input weight used in the H-infinity design for the unstable process is wu=2 (and not wu=1 as written in the book).
• p. 59, Example 2.15. Kc = (1/3)*7.25/(2*6.15)=0.197 instead of Kc = (1/3)*7.25/(2*7.15)=0.169.
• p. 114, Remark 3 (Error). The second sentence should read: "Actually, the part $N_{22}$ of $N$ in (3.123) (with uncertainty) is equal to $N$ in (3.114) (without uncertainty)". For P the correct is that P22 of P in (3.123) is equal to P22 of P in (3.114)). (Thanks to Yan Jiang for noting this).
• p. 137, before (4.62) (MISPRINT). "input and output pole vectors" should be "output and input pole vectors".
• p. 140, Remark 1. Eq. (4.72) is correct but the proof leading to it is not (because uz^H uz and yz^H yz are not the scalar 1 as claimed). New proof: The SVD of G(z) is G(z)=U S V^H (see Remark 2). By using the property V^H V = I, this gives G(z) V = U S which gives (4.71) (by selecting uz as the column in V corresponding to zero gain in S, and yz as the column in U with zero gain in S), and by using the property U^H U = I the SVD gives U^H G(z) = S V^H which gives (4.72).
• p. 157, H2-norm (MISPRINTS). In the paragraph following (4.121), ||G(s)||^2 should be replaced by ||G(s)||_2 (i.e., subscipt 2 instead of superscript). Furthermore, eq. (4.122) should be deleted, as we should not take the max over impulses, but rather the sum as described in the paragraph above.
• p. 175, Example 5.1 (MISPRINT). Change 3.38 to 3.48 (two places) and 5.38 to 5.48.
• p. 184, Section 5.7.1 (inverse response) (CLARIFICATION). It is stated on p.184 that "For a stable SISO plant with nz real RHP-zeros, it may be proven (Leon de la Barra, 1994) that the output in response to a step change in the input will cross zero (its original value) at least nz times." Here the words "it may be proven" should be changed to "it was found" and the reference should be changed to Leon de la Barra (personal communication, 1998), as referred to on the typo list for the first edition (p. 174).

Additional comments: Hoagg and Bernstein (IEEE Control Systems magazine, July 2007) say that numerical testing suggests that the statement may be true, but that a proof of this conjecture is open. First, note that the statement contains the words at least which seems to have been missed by Hoagg and Bernstein. Second, as mentioned above, the basis for the statement (conjecture) is actually a personal communication from Leon de la Barra (1998). As noted by Hoagg and Bernstein, the earlier paper by la Barra (1994) has a more restrictive stament, where it is proved that the number of zero crossings is equal to the number of positive zeros for strictly proper transfer functions with only real poles and zeros.

• p. 190, first line (MISPRINT). A "causal unstable feedback controller" should be a "causal unstable feedforward controller".
• p. 211, Room heating example (CLARIFICATION). Note that it is the "response time" (and not the rise time) which is specified as taur=1000s. The response time is equivalent to the closed-loop time constant, which is the time to reach 63% of the setpoint change, approximately. There is no general relationship between bandwidth and time responses, but for the simplest case where we design the controller such that the loop shape is L = k/s, then the gain crossover frequency is wc=k, the bandwidth (defined as the frequency where |S| reaches 0.707) is wb=k, and the closed-loop time constant to setpoints is taur=1/wb=1/k.
• p. 225, Table 6.1 (ERROR/CLARIFICATION). The order in which Matlab reports the eigenvalues is arbitrary (it seems). Because of this the Matlab code on Table 6.1 can give wrong results (thanks to Matthias Heller for poiunting this out). A simpe fix (proposed by Vinay Kariwala) is to replace line 7 in Table 6.1 by:
Yp(:,i) = C(:,diag(E)==p(i))/norm(C(:,diag(E)==p(i)));
• p. 226. Eq. (6.12) (MISPRINT). The H should be moved from the left Qzp2 to the right Qzp2. In addition, in the expression for [Qz2]ij below, the second W2 should be W2^H (which usually will not matter because W2 is normally diagonal).
• p. 229, Eq. (6.22) (MISPRINT). Argument (s) should be replaced by (z), and the norm should be the vector 2-norm, ||.||_2
• p. 230, Eq. (6.27) (MISPRINT). The absolute value on the right hand side should be replaced by the 2-norm, as in (6.24).
• p. 238 (MISPRINT). Eq. (6.41) is the SISO condition and in the MIMO case it needs to be replaced by (6.24).
• p. 242 (MISPRINT). Below Eq. (6.56). Should be S'=(I+G'K).
• p. 263 (CLARIFICATION). Strictly, speaking the sign of the weight in (7.11) should be opposite, but it will not matter for our purposes since the uncertainty Delta can be both positive or negative (between -1 and 1), so it will generate the same uncertainty set when we vary Delta. Conclusion: Only the magnitude of the uncertainty weight matters, and there are several places in the book where the sign is opposite of what follows from the algebra (for example, another case is eq. (7.59)).
• p. 299, Exercise 8.5 (MISPRINT) W_I Delta_I should be replaced by Delta_I W_I in the expression for F.
• p. 364, eq. (9.61) (MISPRINT). \delta and \epsilon should be u_{\Delta} and y_{\Delta}, respectively.
• p. 395, Below Maximum gain rule (MISPRINT). Should be: This rule may be stated as MAXIMIZING the scaledi minimum singular value...
• p. 397, section 10.3.6 Selecting controlled outputs: measurement combinations. (CLARIFICATION) It is stated that the optimal combination (H) can be found from (10.12) using a numerical search. Actually, one can reformulate it as a convex optimization problem (quadratic problem with inequality constraints) and even provide an analytical expression for the optimal H. The reformualtion is shown by Alstad et al. (2009) (V. Alstad, S. Skogestad and E.S. Hori, Optimal measurement combinations as controlled variables'', Journal of Process Control, 19, 138-148 (2009)).
• p. 407, Eq. (10.20) (MISPRINT). The (3,5)-element in the matrix should be 1/s (the transfer function from VT to MD is an integrator).
• p. 446 or p. 447, Example 10.22 (MISPRINT). It should say "so lambda11(0)=lambda11(infty)=-1".
• p. 483, below (12.74). Should say: "which form bases for the null spacec of G'(X) and H'(X), respectively.", And then (12.75) should read: W_{G(X)}'G = 0, W{H(X)}'H = 0
• p. 489-490. Three related errors: (1) Below eq. (12.102), the new variable L should be L=FQ (and not L=QF). (2) In the last LMI on page 489, QF' should be replaced by L' (element 1,2). (3) p. 490 second line, it should read F=L Q^-1 (and not F=Q^-1 L). (Thanks to Rafael Morales for pointing out these).
• p. 540 (MISPRINT). Equation (A.136). The is a missing absolute value inside the integral, it should be |g(t)1.
• p. 541 (MISPRINT). Sign error: I- should be I+ in (A.142) and (A.143)
• p. 562 (MISPRINT). Wonham, M. (1974), "Linear Mulivariable Systems" should be "Linear Multivariable Control"

### In first printing (2005) only (they have been corrected in later printings):

• p. 35, Figure 2.15 (MISPRINT): Phases for L and S are interchanged.
• pages 46 and 349 (MISPRINT): Change Example 2.6.2 to Example 2.8.
• p. 57, after eq. (2.96) (CLARIFICATION): add "where tau1 >= tau2 and"
• p. 84, Example 3.8 (MISPRINT): The equation just after "Substituting this into (3.62) gives" should read: y1 = (g11 - g21/g22 * g12)*u1
• pages 158, 355, 539 and 540 (3 places) (MISPRINT): Change "Tables A.5.7 and A.5.7" to "Tables A.1 and A.2"
• pages 176, 180, 183, 196 and 206 (MISPRINT): Change Table 5.3.2 to Table 5.1
• p. 227, eq. (6.19) (MISPRINT): Lambda(p) should be Theta(p) (diagonal matrix of output delays) - see (5.18) for SISO equivalent.
• p. 235, Exercise 6.5. Replace "For a plant with..." by a "For a system L=GK with..."
• p. 286, text below Fig 7.20 (MISPRINT): Says Fig. 7.6.4 but should be Fig. 7.20.
• p. 313, Exercise 8.18. "Answers: Yes and No" should be "Answers: No and No".
• pages 286, 296 and 308 (MISPRINT): Change Figure 7.6.4 to Figure 7.20
• p. 375, Table 9.3. Change Matlab command sqrt to sqrtm (4 places)
• p. 395, Example 10.5 (MISPRINT). sigma(G(0)) should be the minimum singular value and not the maximum.
• p. 395 (just before Example 10.5) and p. 396 (4th line in Section 10.3.4) (MISPRINT): sigmamin(Juu^1/2 G) should be sigmamin(G Juu^-1/2).
• p. 400, Item A2 (CLARIFICATION). The given expression Gi^y Juu^-1 Jud - Gdi^y for the optimal setpoint variation is correct (see Halvorsen, 2003), but it is not given in the book (so the reader probably wonders where it came from). An alternative method is to note that the optimal input clearly is uopt=d as this gives J=0. Substituting d=1 (the maximum disturbance) and u=uopt=1 (the optimal input) into the defining expressions for the candidate measurements, then gives eopt1 = 0.1 (u-d) = 0, eopt2 = 20 u = 20 and eopt3 = 10u-5d = 5. Note that only the magnitude matters.
• p. 403, General rule (CLARIFICATION). The scaled gain matrix is G'= S1 G S2, where S1=1/span(z) and S2=Juu^-1/2.
• p. 416, after proof (CLARIFICATION): Closing secondary loops MAY make controllability worse if the action of the secondary (inner, fast) loop "overcompensates" and thereby makes the system more sensitive to the disturbance. As an example consider a plant with Gd1=1, G12=1, G22=-0.1 and Gd2=1. Then with tight control of y2, the disturbance gain for y1 increases by a factor 9 (from Gd1=1 to Pd = Gd1 - G12 G22^-1 Gd2 = 9). Thus, to avoid confusion, replace the statement "closing the secondary loops does not limit the controllability of the remaining control problem by introducing additional RHP-zeros" by "closing the secondary loops does not introduce additional RHP-zeros".
• p. 424, Equations (10.41) and (10.42) (MISPRINT): Replace theta1 by theta2.
• p. 425, Exercise 10.8, last line (ERROR). For case (b) using gains Ki=10 in all loops yields instability (because the inner loops must generally be faster to avoid instability). Therefore change "with gains Ki=10" to "with gains 10 (innermost loop), 5, 2.5, 1 and 0.5 (outer loop). Also try using a PI controller in the outer loop to avoid the steady-state offset. Compare the responses to disturbances entering before G1 (at t=0), G2 (t=20), G3 (t=40), G4 (t=60), G5 (t=80), and for a setpoint change (t=100)".
• p. 441 (Remark) (ERROR). It is claimed that RGA(G)=I implies that G is triangular for a 3x3 system. This is not true - it only holds for a 2x2 system - as illustrated by the following counterexample provided by Vinay Kariwala. The 3x3 matrix
    G = [g11   0     0;
g21   g22   g23;
g31   0     g33]

is not triangular, but RGA(G)=I for any non-zero value of the entries gij. Note that mu(E)=0 for this system (so it is clearly diagonally dominant) and stable individual loops gurantee overall stability.

However, RGA=I does not generally imply mu(E)=0 (or even diagonally dominance) as is shown by the 4x4 counterexample in the book. Thus, this 4x4 counterexample is worse from a decentralized control point of view.
To see how to generate such "counterexamples" note that RGA(G)=I occurs when det G is the product of the diagonal elements gii (thanks to Nima Monshizadeh Naini for noting this). To see this consider the formula for RGA in (A.78): lambda_ij = (-1)^i+j gij*detG^ij / det G. To have RGA=I (lambda_ii=1) we must then require det G = gii * det G^ii (for all i), and since det G^ii is independent of gii this proves that det G is the product of the diagonal elements gii (assuming that we are looking for a "structural" property that holds for any value of gii). In particular, for a 3*3 plant the above relations yield:

    For i=1:    det(G) = g11(g22*g33-g23*g32) = g11*g22*g33-g11*g23*g32
For i=2:    det(G) = g22(g11*g33-g13*g31) = g11*g22*g33-g22*g13*g31
For i=3:    det(G) = g33(g11*g22-g12*g21) = g11*g22*g33-g33*g12*g21

and to get det(G)=g11*g22*g33 (and have RGA=I for the 3x3 case) we must require g23*g32=0, g13*g31=0 and g12*g21=0. This is satisfied for the above 3x3 counterexample which has g12=0, g13=0 and g32=0.
• p. 478-479. Three related MISPRINTS:
• Equation (12.33) should be F2(...) > 0
• Equation (12.39) should be F2(P) = 2P
• Equation (12.46) should be F2(P) = P (the comment in Table 12.3 should then also be changed to -F2(P)=-P; the code itself is OK!)

• p.31. Another interpretation of the Total Variation of a signal y (assuming that its derivative exists) is: TV(y) = \int |dy/dt| dt. Thus, a signal with a small TV is "smooth" in the sense that the avarage (integrated) magnitude of its derivative |dy/dt| is small.
• p. 141. Another remark on poles and zeros. Multivariable poles and zeros have directions. To hellustrate this, assume that we have three square transfer matrices P1, P2 and P3. Suppose that there is no rhp pole-zero cancellation (say at s=a) between P1 and P3 (i.e. P1*P3) and no between P2 and P3 (i.e. P2*P3).
Question: Can there still be problems with rhp pole-zero cancellations in P1*P2*P3 (i.e., between P1*P2 and P3)?
Answer: Yes, for the MIMO case this is possible (for the SISO case the answer is clearly no). Consider a simple 2x2 example with P1 = diag{(s-a), 1}, P2 = (0 1; 1 0); P3 = diag{1, 1/(s-a)}. The "rotation" matrix P2 will then result in a rhp pole-zero cancellation at s=a between P1*P2 and P3.
• p. 137, Input pole vectors and pole placement by state feedback . We are not a big fan of pole placement, but note that the pole vectors can be used to compute directly the minimum state feedback gain (u = -Kx) to move a particular pole from it s original location p to the location mu. We find that K = [(p-mu)/up] q^T, where up is the input pole vector and q is the normalized (||q||_2=1) left eigenvector of A corresponding to the pole p. This expression can be used to find out which pole is must difficult to move. See here for an example.
• p. 231, Matlab commands in Table 6.2 . Unfortunately, some of the Matlab commands in the book are outdated. For example, hankelsv(G) does not seem to work any more. Instead, to compute the Hankel singular values of the antistable part in (6.23) use: [GS, GNS] = stabsep(G); hsv = hsvd(GNS'); ksmin = 1/min(hsv)
• p. 347, Additional remark on including integral action for LQG control.
There are several ways to include integral action in LQG controllers (and in the closely related model predictive controllers (MPC)):
1. Integrate the controller error as illustrated in the book. As shown in Figure 9.5 on page 347, integral action may be included by using the integrated contror error r-y in the cost function. However, note that this actually leads to a two-degrees-of-freedom controller, and for an output disturbance the feedback part of the controller is rather poor, and, as stated on page 349, the resulting response is "significantly worse with an overshoot in y of about 40%."
2. Augment the plant with integrators as discussed in the first edition of the book (1996-edition, pages 356-357). This is done by augmenting the plant with one integrator for each input before the LQG design, and subsequently adding these integrators to the controller. This results in the same "rather poor" feedback LQG controller as with method 1. Indeed, the response in Figure 9.6 on page 357 in the 1st edition shows an overshoot of 40%.
3. Let the controller compute the input change rather than the input. This is another way of "augmenting the plant with integrators", because the acutal inputs are obatined by integrating the changes in the input. This idea is commonly used to add integral action in model predictiove control (MPC), but based on our "40% overshoot simulations" we expect this approach to result in poor designs in some cases.
4. Augment the model with integrating disturbances. All the three approaches mentioned so far give the same feedback controller. A more general approach (and generally with better performance) for adding integral control for LQG and MPC, is to include integrating disturbances, for example, at the plant input.

• p. 351, Additional remark on LQG control with RHP-zeros and use of observers.
The concept of unstable zeros (RHP-zeros) can easily be forgotten, especially when dealing with LQG control where the use of internal states tends to hide the problem with RHP-zeros. H�kon Dahl-Olsen has prepared an example to show this. Consider the following system with one input (u) and two outputs (y1 and y1):
A = [0.2 0; 0.5 -0.2];  B = [-0.2; 0];
C = [1 0; -0.96 0.784]; D = [0;0];

We note from the state space realization that the system is unstable, but to understand clearer the properties of the system, note that it corresponds to the following transfer functions:
y1 = 1/(-5s+1) * u;
y2 = (-4.8s+1)/(5s+1) * y1

This may be viewed as an unstable system with a single state (y1=x1), but we also have a measurement y2 of y1 which has a RHP-zero close to the RHP-pole. This problem is motivated by a real problem where we want to stabilize slug flow. y1 is then the pressure at the seabottom which may be difficult to measure. y2 is the pressure at the top which is easy to measure. We now consider two cases: Case 1. Measure both states (including y1=x1). It turns out the optimal LQR- controller in terms of stabilization with minimum input usage is to use state feedback (P-controller) only from x1. This moves the unstable pole to its mirror image (from 0.2 to -=.2; which is a well-known result). Case 2. Measure only y2. The optimal is to use a state observer (Kalman filter) which estimates the states (x1 and x2), and then combine it with the above LQR-controller (this is the separation principle). However, there are problems here because of the RHP-zero (at z=1/4.8=0.2083) which is located close to the RHP-pole (at p=0.2), In fact, we know from (5.21) that the sensitivity function S from u to y2 must have a peak of at least |z+p|/|z-p| = 49 (in practice, the system is impossible to stabilize if we only have y2 as a measurement). Thus, we know that good control is not possible - even with the best state estimator in the world. This is confirmed by simulations with the LQR (see details).

• p. 396, Additional remarks on self-optimizing control.
• We have assumed that the setpoints are the nominally optimal values. This is optimal for very small disturbances, but for larger disturbances the loss may be reduced and a larger feasibility region achieved, by reoptimizing to the find the "robust setpoints", which are optimal in terms of some expected average cost (see Ph.D. thesis by Govatsmark and the paper M.S. Govatsmark and S. Skogestad, Selection of controlled variables and robust setpoints'', Ind.Eng.Chem.Res, 44 (7), 2207-2217 (2005)).
• We have made the assumption (pages 390 and 392) that the optimally constrained variables are controlled at their constraints (active constraint control''). However, this is not a critical assumption. In fact, it may sometimes be worthwhile to keep the corresponding degrees of freedom (that were assigned for active contraint control) in the set u. If we then include the optimal constraints as candidate controlled variables in the set y, then the maximum gain rule will normally end up by concluding that the active constraint should be controlled. This follows because the optimal variation in these variables zero, so when neglecting the implementation error, the scaled gain for these variables is infinity. If we include the implementation error for the active constraints, then we may actually find for some cases that it is not optimal to control the active constraints. In such cases we are likely to get feasibility problems (because the constraints are violated). This may be solved by reoptimizing some or all of the setpoints to obtain robust setpoints'' (see above) that are feasible for all disturbances.

• p. 431, Decentralized control of diagonal plant (Example 10.14).
Comment. Most of the following has been included in the second printing (Dec. 2006/Feb. 2007)
In the second edition of the book we have added several introductory examples for decentralized control (pp. 430-436). The most striking is probably Example 10.14 where a diagonal plant is controlled using the off-diagonal pairings. A simple physical examples is the control of room temperature in two rooms located in two different countries, say UK (Ian's office) and Norway (Sigurd's office). The setup is then that Ian gets a measurement of Sigurd's room temperature (in Norway), and based on this adjusts the heating (or cooling) in his room (in the UK). Similarly, Sigurd gets a measurement of Ian's room temperature (in the UK), and based on this adjusts the heating (most likely!) in his room (in Norway). As shown in Figure 10.15(b) such a ridiculous setup (with g11=0 and g22=0) is actually workable because of the "hidden" feedback loop going through the off-diagonal elements and the controllers (g12*g21*k1*k2 is nonzero), provided one is able to tune the controllers k1 and k2 (which is not trivial and as seen requires a negative sign in one of the controllers). Two lessons from this example are that (1) decentralized control can work for almost any plant, and (2) the fact that we have acceptable closed-loop performance does not mean that we are using the best pairing.

• p. 441 (first printing) or p. 442 (second printing). Triangular plant and RGA . In the book we give the following 4x4 counterexample to the claim "RGA(G)=I implies that G is triangular": >> 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. 484. Some comments on the use of Finsler's Lemma.

• p. 532 (Section A.5.2), Interpretation of matrix Frobenius norm.
Let z=Aw where the vector w is in a given set and we want to evaluate the two-norm of the vector z.
We consider three sets for w:
(1) ||w||_2 \le 1
(2) ||w||_infty \le 1 (largest element in w less than 1)
(3) w is N(0,I) (normally distributed with zero mean and variance=1)
and two cases for the evaluation of the two-norm of z:
(a) worst-case (for a specific allowed w)
(b) average/expected (for all allowed w)
We then have the following results (Kariwala et al., Ind.Eng.Chem.Res., 2008, 1150-1158):

Case (allowed set for w)  	|  (a) worst-case ||z||_2	|  (b) average ||z||_2
--------------------------------|-------------------------------|----------------------
1    ||w||_2 \le 1		|    sigma(A)			|   ||A||_F*sqrt(1/3nw)
2    ||w||_infty \le 1		|    sigma(A)*sqrt(nw) (UPPER) 	|   ||A||_F*sqrt(1/3)
3    w is N(O,I)		|    infinity			|   ||A||_F

Notes: A uniform disturibution for w is assumed in cases 1b and 2b
nw is the length of the vector w
sigma(A)=||A||_2 is the maximum singular value of A
The value for Case 2a is an upper bound; the lower bound is sigma(A).