Post on 16-Apr-2022
Technische HochschuleZürich
Eidgenössische Ecole polytechnique fédérale de ZurichPolitecnico federale di ZurigoSwiss Federal Institute of Technology Zurich
Institut für Mess- und Regeltechnik Prof. M. Steiner, Prof. Dr. H. P. Geering
Urs ChristenRoberto Cirillo
Nonlinear H∞ ControlDerivation and Implementation
Abstract
Mathematical and computational aspects of nonlinear H∞ control or, more precisely, of L2
gain synthesis are considered. The output feedback problem is solved for smooth plants
slightly more general than those found in literature so far. The main contribution, however, is
that the solution to the resulting Hamilton-Jacobi-Isaacs inequalities is approximated by
power series and implemented in Maple V. The controllers are obtained as C coded functions
in a form suitable for simulations with SIMULINK; they could be used for implementation on
DSPs such as dSPACE as well. Since the matrix inversion necessary for calculating the output
injection gain usually cannot be performed symbolically, it is carried out on line in the C
coded function. The Maple routines are tested on a benchmark example.
Institut für Mess- und Regeltechnik
IMRT Report No. 31
July 1997
2
Table of Contents
1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31.1 Potential of Nonlinear H∞ Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2 Derivation of the Controller . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52.1 Problem Formulation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52.2 State Feedback Controller . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62.3 Output Feedback Controller . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
3 Approximated Controller . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193.1 State Feedback Controller . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203.2 Output Feedback Controller . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233.3 Alternative Output Feedback Controller . . . . . . . . . . . . . . . . . . . . . . . . 29
4 Listings for Maple V . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364.1 hinfSF: State Feedback . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364.2 hinfOF_x: Output Feedback . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 384.3 hinfOF_p: Alternative Output Feedback . . . . . . . . . . . . . . . . . . . . . . . 434.4 Auxiliary Subroutines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 474.5 Generation of Code for SIMULINK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
5 Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 585.1 State Feedback Controller . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 585.2 Output Feedback Controllers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
Appendix: Derivatives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
Urs Christen was with the Department of Systems Science and Mathematics, Washington Univer-sity in St. Louis, Missouri, USA, while this report was being completed.
1 Introduction
3
1 Introduction
Shortly after the publication of the state-space solution to the linear H∞ control problem in 1989[7], solutions to its nonlinear equivalent, the L2 gain problem, began to appear in literature; for refer-ences see [2], [12], [13]. Those publications, however, mainly deal with the mathematical aspects ofthe L2 gain problem.The question of how these methods may be applied to solve engineering prob-lems remains unaddressed. In those references, the structure of the plant is, therefore, restricted to aminimal structure needed to show the relevant mathematical aspects of the solution. In the disserta-tion [2], the solution for input-affine plants can be found, and in [13], the solution to the more generalplant
is studied.
In this report, we closely follow Isidori and Kang [13] but remove one structural assumption inorder to have more freedom when considering the engineering aspects in the future. The plant con-sidered is given by
(1.0.1)
The first equation in (1.0.1) describes the state x of the plant subject to the exogenous input w, whichconsists of disturbance and reference signals, and to the control input u. The second equation definesthe controlled variable z, which has to be kept small. The last expression is the measurement equa-tion, which describes the output signal y provided to the controller. As discussed in [1], it is not pos-sible to extend the measurement equation to since the trick used in linear H∞synthesis to deal with such systems cannot be transferred to nonlinear systems. This is not a bigrestriction, however, since the input of the plant always can be filtered with a sufficiently fast filter sothat no feed-through occurs.
The aim of the control is to attenuate the influence of the exogenous input signal w on the con-trolled variable z. The attenuation is defined in terms of the ratio of the L2 norms of w and z , the so-called L2 gain. For a nonlinear system, the L2 gain is smaller or equal to a constant γ > 0 if
for all w(·) for which the L2 norm exists.
x X x w u, ,( )=
z Z x u,( )=
y Y x w,( )=
x X x w u, ,( )=
z Z x w u, ,( )=
y Y x w,( ).=
y Y x w u, ,( )=
z 2
w 2-----------
zT t( )z t( ) td0
∞∫
wT t( )w t( ) td0
∞∫
--------------------------------------- γ≤=
1 Introduction
4
1.1 Potential of Nonlinear H
∞
Control
1.1 Potential of Nonlinear H∞ Control
This report does not deal with the engineering aspects of nonlinear H∞ control. It rather providesthe tools needed for future research in that direction. Nevertheless, some preliminary reflectionsabout the potential of this method are in place.
Nonlinear H∞ control is an extension of the linear H∞ method, which has been used successfullysince the end of the 1980’. The nonlinear counterpart, as it is described here, just considers somehigher orders in a series approximation of the plant and thus should be at least as good as the linearmethod applied to the first-order approximation of the plant. When a single linear, time-invariantcontroller is not sufficient to achieve the desired performance over the whole operating range, gain-scheduled controllers may be used. However, the “classical” gain scheduling is a very ad hoc proce-dure. The more systematic gain scheduling based on linear matrix inequalities [9], on the other hand,has the disadvantage that the parameters are assumed to have an infinitely high rate of variation. Thisassumption may lead to conservative control laws. Moreover, for the method described in [9], theparameters must enter the plant affinely. These two disadvantages could be overcome by nonlinearH∞ control.
As an alternative to the Taylor approximations, approximation methods which yield good results ina region rather than in a single point could be considered [3, 4]. However, these methods are — intheir present form — computationally even more involved than those described in this report.
Note
Throughout this report, we tried to keep the contents on a self-explanatory level. For this reason, where it was found tobe appropriate, we included many of the intermediate steps in the calculations. They appear in a smaller font.
2 Derivation of the Controller
5
2.1 Problem Formulation
2 Derivation of the Controller
2.1 Problem Formulation
We consider a system of the form
(2.1.1)
with x defined in a neighborhood of the origin in and , , , . It isassumed that , , and are smooth mappings of class Ck, k being suffi-ciently large.
2.1.1 Assumptions
In addition to smoothness, the following is assumed:
A1: System (2.1.1) has an equilibrium point at (x, w, z) = (0, 0, 0):
, , .
A2: The matrix
satisfies
where γ is the bound on the L2 gain of the closed-loop system.
A3: The matrix
has full column rank m2.
A4: The matrix
has full row rank p2.
A5: For any bounded trajectory of system (2.1.1) with input w = 0 ∀ t
.
Assumption A1, which says that the origin must be an equilibrium point of the system, is made forease of derivation. If an equilibrium point exists, A1 can always be guaranteed by suitable variabletransformations. A2 presupposes that the H∞ problem is solved for the feed-through from w to z inthe linear problem and ensures that the problem has a saddle point solution (cf. p. 7). Satisfying A2 is
x X x w u, ,( )=
z Z x w u, ,( )=
y Y x w,( )=
Rn w Rm1∈ u Rm2∈ z Rp1∈ y Rp2∈X x w u, ,( ) Z x w u, ,( ) Y x w,( )
X 0 0 0, ,( ) 0= Z 0 0 0, ,( ) 0= Y 0 0,( ) 0=
D11 w∂∂
Z x w u, ,( )0 0 0, ,( )
=
σ D11( ) γ<
D12 u∂∂
Z x w u, ,( )0 0 0, ,( )
=
D21 w∂∂
Y x w,( )0 0,( )
=
Z x 0 u, ,( ) 0 t∀= ⇒ x t( )t ∞→lim 0=
2 Derivation of the Controller 6 2.2 State Feedback Controller
never a problem since the control engineer designs the output z when defining the engineering prob-lem.
Assumptions A3 and A4 ensure that the H∞ problem is nonsingular and therefore the squares and are invertible in the Riccati equations for the linear problem. The last assump-
tion, A5, says that the system with output z, input u, and w = 0 must not have a neutrally stable [11, p.388] zero dynamics.
2.1.2 Goal
The controller has to achieve two goals: it must stabilize the closed-loop system and attenuate theinfluence of the exogenous input signal w on the controlled signal z, i.e., it has to bound its L2 gainby a given value γ. The disturbance attenuation property can be characterized by dissipativity (seealso [13] and the references therein). A nonlinear system
(2.1.2)
is said to be locally dissipative near (x, w) = (0, 0) with respect to a given supply rate s(w, z) if thereexists a smooth, nonnegative function V(x) vanishing at x = 0 such that
for all (x, w) in a neighborhood of (0, 0). If (2.1.2) is locally asymptotically stable and locally dissi-pative with respect to the supply rate
,
its output response for a sufficiently small input and for x(0) = 0 satisfies
for all t > 0. Hence, (2.1.2) has an L2 gain less than or equal to γ.
2.2 State Feedback ControllerIn this section, a feedback law is sought which renders the closed-loop system
(locally) dissipative with respect to the supply rate . This problem can bedescribed as a zero sum differential game with two players [13].
Define
,
with which the system equations read
(2.2.1)
Then
D12T D12 D21D21
T
x f x w,( )=
z h x w,( )=
V x x( ) f x w,( ) s w h x w,( ),( )+ 0≤
s w z,( ) γ2 w 2 z 2–=
γ2 w τ( ) 2 z τ( ) 2–( ) τd
0
t
∫ V x t( )( ) 0≥ ≥
u α2 x( )=
x X x w α2 x( ), ,( )=
z Z x w α2 x( ), ,( )=
s w z,( ) γ2 w 2 z 2–=
v w
u=
x X x v,( )=
z Z x v,( ).=
2 Derivation of the Controller 7 2.2 State Feedback Controller
,
and the Hamiltonian function for this differential game can be found to be
.
In a neighborhood of (x, λ) = (0, 0), there exists a smooth function
satisfying
(2.2.2)
.
The Hessian of H satisfies
.
The matrix R may be factored as with
where the upper diagonal element of M is negative definite due to Assumption A2 and the lowerdiagonal element is positive definite. Hence, the Hamiltonian function H has a saddle point in (w, u)for each (x, λ) in the neighborhood of (x, λ, w, u) = (0, 0, 0, 0):
.
Define a smooth, nonnegative function V: in a neighborhood of x = 0 such that V(0) = 0and the Hamilton-Jacobi-Isaacs inequality
(2.2.3)
holds for each x in a neighborhood of zero. Then
(2.2.4)
γ2 w 2 vT γ2Im10
0 0v=
H x λ v, ,( ) λT X x v,( ) Z x v,( ) 2 vT γ2Im10
0 0v–+=
v∗ x λ,( )w∗ x λ,( )
u∗ x λ,( )=
v∂∂
H x λ v, ,( )v v∗ x λ,( )=
0=
v∗ 0 0,( ) 0=
v2
2
∂∂
H x λ v, ,( )x λ v, ,( ) 0 0 0, ,( )=
2R 2D11
T D11 γ2Im1– D11
T D12
D12T D11 D12
T D12
= =
R N T MN=
MD11
T D11 γ2Im1– D11
T D12 D12T D12( ) 1– D12
T D11– 0
0 D12T D12
=
NIm1
0
D12T D12( ) 1– D12
T D11 Im2
=
H x λ v, ,( )v w
u∗ x λ,( )=
H x λ v, ,( )v
w∗ x λ,( )
u∗ x λ,( )=
H x λ v, ,( )v w∗ x λ,( )
u=
≤ ≤
Rn R→
H x V xT x( ) v∗ x V x
T x( ),( ), ,( ) 0≤
u u∗ x V xT x( ),( )=
2 Derivation of the Controller 8 2.3 Output Feedback Controller
yields a closed-loop system satisfying
, (2.2.5)
i.e., a system which has the required dissipativity property in a neighborhood of (x, w) = (0, 0).
Due to Assumption A5, the feedback law (2.2.4) locally asymptotically stabilizes the system if V(x)is positive definite. This can be seen by a Lyapunov type of argument. For w = 0, expression (2.2.5)reads
where can only be zero for asymptotically stable trajectories of x (Assumption A5). Thus,V(x) being positive definite and
being negative proves asymptotic stability of the closed-loop system.
2.3 Output Feedback ControllerIf only the output y rather than the state x is available for feedback, the state has to be reconstructed
by an observer. In this section, the conditions on such an observer are derived which must be met toensure that the composition of the plant and the controller containing the observer satisfy the H∞norm.
2.3.1 A Necessary Condition for Output FeedbackDefine the Hamiltonian function as
.
Since
due to Assumption A2, there exists a smooth function in a neighborhood of (0, 0, 0) suchthat
. (2.3.1)
Hence, locally
, (2.3.2)
where and .
First order terms of a Taylor series expansion for (2.3.1) – valid in a neighborhood of (0, 0, 0, 0):
Hence,
V x x( )X x w u∗, ,( ) Z x w u∗, ,( ) 2 γ2 w 2–+ 0≤
V x x( )X x 0 u∗, ,( ) Z x 0 u∗, ,( ) 2+ 0≤
Z x 0 u∗, ,( )
tdd
V x( )t∂
∂V x( ) V x x( )
t∂∂x
+ V x x( )X x 0 u∗, ,( )= =
K : Rn Rn Rm1 Rp2××× R→
K x p w y, , ,( ) pT X x w 0, ,( ) yT Y x w,( )– ZT x w 0, ,( )Z x w 0, ,( ) γ2wT w–+=
w2
2
∂∂
K x p w y, , ,( )x p w y, , ,( ) 0 0 0 0, , ,( )=
2 D11T D11 γ2I–( ) 0<=
2ZwT x w 0, ,( )Zw x w 0, ,( )
x p w y, , ,( ) 0 0 0 0, , ,( )=2γ2I–=
w x p y, ,( )
w∂∂
K x p w y, , ,( )w w x p y, ,( )=
0= w 0 0 0, ,( ) 0=
w x p y, ,( ) 2 D11T D11 γ2I–( )( ) 1– 2D11
T C1x B1T p D21
T y–+( )–=
C1 Zx x w u, ,( )0 0 0, ,( )
= B1 Xw x w u, ,( )0 0 0, ,( )
=
w∂∂
K x p w y, , ,( ) iTi∂
∂w∂∂
K x p w y, , ,( )
0 0 0 0, , ,( )i∑ 0= = i x p w y, , ,=
2 Derivation of the Controller 9 2.3 Output Feedback Controller
Moreover,
wT x p y, ,( ) xTx∂
∂w∂∂
K ·( )
0 0 0 0, , ,( )
pTp∂
∂w∂∂
K ·( )
0 0 0 0, , ,( )
+ +
–=
yTy∂
∂w∂∂
K ·( )
0 0 0 0, , ,( )
+
w2
2
∂∂
K x p w y, , ,( )
1–
0 0 0 0, , ,( )
y2
2
∂∂
K x p w x p y, ,( ) y, , ,( )x p y, ,( ) 0 0 0, ,( )=
12---D21 D11
T D11 γ2I–( ) 1– D21T– 0>=
y2
2
∂∂
yT Y x w,( )– ZT x w 0, ,( )Z x w 0, ,( ) γ2wT w–+( )x p y, ,( ) 0 0 0, ,( )=
=
y∂∂
Y T x w,( )– yTw∂∂
Y x w,( )y∂
∂w–
Z∂∂
ZT Z( )w∂∂
Z x w 0, ,( )y∂
∂w γ2
w∂∂
wT w( )( )y∂
∂w–+
x p y, ,( ) 0 0 0, ,( )=
=
y∂∂
Y T x w,( )– yTw∂∂
Y x w,( )y∂
∂w–
x p y, ,( ) 0 0 0, ,( )=
2w∂∂
Y x w,( )y∂
∂w
T–
x p y, ,( ) 0 0 0, ,( )=
=
y∂∂
w x p y, ,( )x p y, ,( ) 0 0 0, ,( )=
2 D11T D11 γ2I–( )( ) 1– D21
T=
y∂∂
Y T x w,( )– yTw∂∂
Y x w,( )y∂
∂w–
x p y, ,( ) 0 0 0, ,( )=
D21– D11T D11 γ2I–( ) 1– D21
T=
y∂∂
Z∂∂
ZT x w 0, ,( )Z x w 0, ,( )( )w∂∂
Z x w 0, ,( )y∂
∂w
x p y, ,( ) 0 0 0, ,( )=
=
y∂∂ 2ZT x w 0, ,( )
w∂∂
Z x w 0, ,( )y∂
∂w
x p y, ,( ) 0 0 0, ,( )=
=
2w∂∂
Z x w 0, ,( )y∂
∂w
T
w∂∂
Z x w 0, ,( )y∂
∂w
x p y, ,( ) 0 0 0, ,( )=
=
12---D21 D11
T D11 γ2I–( ) 1– D11T D11 D11
T D11 γ2I–( ) 1– D21T=
γ2–y∂
∂w∂∂
wT w( )y∂
∂w
x p y, ,( ) 0 0 0, ,( )=
γ2–y∂
∂ 2wT x p y, ,( )y∂
∂w
x p y, ,( ) 0 0 0, ,( )=
=
2γ2–y∂
∂w
T
y∂∂
wx p y, ,( ) 0 0 0, ,( )=
=
12---γ
2– D21 D11
T D11 γ2I–( ) 1– D11T D11 γ2I–( ) 1– D21
T=
2 Derivation of the Controller 10 2.3 Output Feedback Controller
Thus, there exists a smooth function in a neighborhood of (0, 0) such that
. (2.3.3)
Locally
(2.3.4)
Again, derived from the first-order terms of a series expansion:
y∂∂
Y T x w,( )– yTw∂∂
Y x w,( )y∂
∂w–
Z∂∂
ZT x w 0, ,( )Z x w 0, ,( )( )w∂∂
Z x w 0, ,( )y∂
∂w γ2
w∂∂
wT wy∂
∂w–+
x p y, ,( ) 0 0 0, ,( )=
=
D21– D11T D11 γ2I–( ) 1– D21
T 12---D21 D11
T D11 γ2I–( ) 1– D11T D11 D11
T D11 γ2I–( ) 1– D21T+ +=
12---γ
2D21 D11
T D11 γ2I–( ) 1– D11T D11 γ2I–( ) 1– D21
T–
D21– D11T D11 γ2I–( ) 1– D21
T 12---D21 D11
T D11 γ2I–( ) 1– D11T D11 γ2I–( ) D11
T D11 γ2I–( ) 1– D21T+=
D21– D11T D11 γ2I–( ) 1– D21
T 12---D21 D11
T D11 γ2I–( ) 1– D21T+=
12---D21 D11
T D11 γ2I–( ) 1– D21T– 0>=
y* x p,( )
y∂∂
K x p w x p y, ,( ) y, , ,( )y y* x p,( )=
0= y* 0 0,( ) 0=
y* x p,( ) D21 D11T D11 γ2I–( ) 1– D21
T( ) 1–– ×=
2 C2 D21 D11T D11 γ2I–( ) 1– D11
T C1–( )x D21 D11T D11 γ2I–( ) 1– B1
T p–( )
i∂∂
y∂∂
K x p w x p y, ,( ) y, , ,( )x p y, ,( ) 0 0 0, ,( )=
= i x p,=
i∂∂
y∂∂
pT X x w 0, ,( ) yT Y x w,( )– ZT x w 0, ,( )Z x w 0, ,( ) γ2wT w–+( )x p y, ,( ) 0 0 0, ,( )=
=
i∂∂
pTw∂∂
X( )y∂
∂w Y T( )– yT
w∂∂
Y( )y∂
∂w–
Z∂∂
ZT( )Z( )( )w∂∂
Z( )y∂
∂w
w∂∂
wT w( )y∂
∂w–+
x p y, ,( ) 0 0 0, ,( )=
=
p∂∂
pTw∂∂
X x w 0, ,( )y∂
∂w
x p y, ,( ) 0 0 0, ,( )=
0w∂∂
X x w 0, ,( )y∂
∂w
x p y, ,( ) 0 0 0, ,( )=
+=
y∂∂
w x p y, ,( )x p y, ,( ) 0 0 0, ,( )=
2 D11T D11 γ2I–( )( ) 1– D21
T=
p∂∂
pTw∂∂
X x w 0, ,( )y∂
∂w
x p y, ,( ) 0 0 0, ,( )=
B1 2 D11T D11 γ2I–( )( ) 1– D21
T=
x∂∂
Y T x w,( )– yTw∂∂
Y x w,( )y∂
∂w–
x p y, ,( ) 0 0 0, ,( )=x∂
∂Y x w,( )
w∂∂
Y x w,( )x∂
∂w+
T–
x p y, ,( ) 0 0 0, ,( )=
0–=
x∂∂
w x p y, ,( )x p y, ,( ) 0 0 0, ,( )=
D11T D11 γ2I–( ) 1– D11
T– C1=
x∂∂
Y T x w,( )– yTw∂∂
Y x w,( )y∂
∂w–
x p y, ,( ) 0 0 0, ,( )=
C2T– C1
T D11 D11T D11 γ2I–( ) 1– D21
T+=
p∂∂
Y T x w,( )– yTw∂∂
Y x w,( )y∂
∂w–
x p y, ,( ) 0 0 0, ,( )=w∂∂
Y x w,( )p∂
∂w
T–
x p y, ,( ) 0 0 0, ,( )=
0–=
2 Derivation of the Controller 11 2.3 Output Feedback Controller
p∂∂
w x p y, ,( )x p y, ,( ) 0 0 0, ,( )=
2 D11T D11 γ2I–( )( ) 1– B1
T–=
p∂∂
Y T x w,( )– yTw∂∂
Y x w,( )y∂
∂w–
x p y, ,( ) 0 0 0, ,( )=
B1 2 D11T D11 γ2I–( )( ) 1– D21
T=
x∂∂
Z∂∂
ZT x w 0, ,( )Z x w 0, ,( )( )w∂∂
Z x w 0, ,( )y∂
∂w
x p y, ,( ) 0 0 0, ,( )=
=
x∂∂ 2ZT x w 0, ,( )
w∂∂
Z x w 0, ,( )y∂
∂w
x p y, ,( ) 0 0 0, ,( )=
=
2x∂
∂Z x w 0, ,( )
w∂∂
Z x w 0, ,( )+x∂
∂w
T
w∂∂
Z x w 0, ,( )y∂
∂w
x p y, ,( ) 0 0 0, ,( )=
0+=
C1T C1
T D11 D11T D11 γ2I–( ) 1– D11
T–( )D11 D11T D11 γ2I–( ) 1– D21
T=
p∂∂ 2ZT x w 0, ,( )
w∂∂
Z x w 0, ,( )y∂
∂w
x p y, ,( ) 0 0 0, ,( )=
=
2w∂∂
Z x w 0, ,( )p∂
∂w
T
w∂∂
Z x w 0, ,( )y∂
∂w
x p y, ,( ) 0 0 0, ,( )=
0+=
12---– B1 D11
T D11 γ2I–( ) 1– D11T D11 D11
T D11 γ2I–( ) 1– D21T=
x∂∂
w∂∂
wT w( )y∂
∂w–
x p y, ,( ) 0 0 0, ,( )=
γ2–x∂
∂ 2wT x p y, ,( )y∂
∂w
x p y, ,( ) 0 0 0, ,( )=
=
2γ2–x∂
∂w
T
y∂∂
wx p y, ,( ) 0 0 0, ,( )=
0+=
γ2C1T D11 D11
T D11 γ2I–( ) 1– D11T D11 γ2I–( ) 1– D21
T=
p∂∂
w∂∂
wT w( )y∂
∂w–
x p y, ,( ) 0 0 0, ,( )=
γ2–p∂
∂ 2wT x p y, ,( )y∂
∂w
x p y, ,( ) 0 0 0, ,( )=
=
2γ2–p∂
∂w
T
y∂∂
wx p y, ,( ) 0 0 0, ,( )=
0+=
12---γ
2B1 D11
T D11 γ2I–( ) 1– D11T D11 γ2I–( ) 1– D21
T=
x∂∂
y∂∂
K x p w x p y, ,( ) y, , ,( )x p y, ,( ) 0 0 0, ,( )=
=
C2T– C1
T D11 D11T D11 γ2I–( ) 1– D21
T C1T C1
T D11 D11T D11 γ2I–( ) 1– D11
T–( )D11 D11T D11 γ2I–( ) 1– D21
T+ + +=
γ2C1T D11 D11
T D11 γ2I–( ) 1– D11T D11 γ2I–( ) 1– D21
T+
C2T– C1
T D11 D11T D11 γ2I–( ) 1– D21
T C1T D11 D11
T D11 γ2I–( ) 1– D21T+ + +=
C1T D11 D11
T D11 γ2I–( ) 1– D11T D11 D11
T D11 γ2I–( ) 1– D21T– γ2C1
T D11 D11T D11 γ2I–( ) 1– D11
T D11 γ2I–( ) 1– D21T+
C2T– C1
T D11 D11T D11 γ2I–( ) 1– D21
T C1T D11 D11
T D11 γ2I–( ) 1– D21T+ + +=
C1T D11 D11
T D11 γ2I–( ) 1– D11T D11 γ2I–( ) D11
T D11 γ2I–( ) 1– D21T–
C2T– C1
T D11 D11T D11 γ2I–( ) 1– D21
T+=
2 Derivation of the Controller 12 2.3 Output Feedback Controller
Define
.
By construction, for all (x, p, w, y) in a neighborhood of (0, 0, 0, 0),
. (2.3.5)
Theorem 2.1: Necessary condition for disturbance attenuation by output feedback
Consider the plant (2.1.1) for which Assumption A4 holds. Suppose the feedback law
solves the problem of local disturbance attenuation. Let be a positive definite smooth func-tion satisfying
(2.3.6)
for all in a neighborhood of (0, 0, 0). Then the positive definite function satisfies
(2.3.7)
for each x in a neighborhood of zero.
Proof:
Setting ξ = 0 in (2.3.6) yields
.
p∂∂
y∂∂
K x p w x p y, ,( ) y, , ,( )x p y, ,( ) 0 0 0, ,( )=
=
B1 2 D11T D11 γ2I–( )( ) 1– D21
T B1 2 D11T D11 γ2I–( )( ) 1– D21
T+ +=
12---B1 D11
T D11 γ2I–( ) 1– D11T D11 D11
T D11 γ2I–( ) 1– D21T–
12---γ
2B1 D11
T D11 γ2I–( ) 1– D11T D11 γ2I–( ) 1– D21
T+
B1 2 D11T D11 γ2I–( )( ) 1– D21
T B1 2 D11T D11 γ2I–( )( ) 1– D21
T+ +=
12---B1 D11
T D11 γ2I–( ) 1– D11T D11 γ2I–( ) D11
T D11 γ2I–( ) 1– D21T–
12---B1 D11
T D11 γ2I–( ) 1– D21T 1
2---B1 D11
T D11 γ2I–( ) 1– D21T 1
2---B1 D11
T D11 γ2I–( ) 1– D21T–+=
12---B1 D11
T D11 γ2I–( ) 1– D21T=
y* x p,( )y2
2
∂∂
K ·( )
T
0 0 0, ,( ) 1–
x∂∂
y∂∂
K ·( ) T
0 0 0, ,( )
xp∂
∂y∂
∂K ·( )
T
0 0 0, ,( )
p+
–=
12---D21 D11
T D11 γ2I–( ) 1– D21T–
1–C2
T– C1T D11 D11
T D11 γ2I–( ) 1– D21T+( )T x
12---B1 D11
T D11 γ2I–( ) 1– D21T
T
p+ –=
w** x p,( ) w x p y* x p,( ), ,( )=
K x p w y, , ,( ) K x p w x p y, ,( ) y, , ,( )≤
K x p w x p y, ,( ) y, , ,( ) K x p w** x p,( ) y* x p,( ), , ,( )≥
ξ η ξ y,( )= u θ ξ( )=
U x ξ,( )
Ux x ξ,( ) Uξ x ξ,( )X x w θ ξ( ), ,( )
η ξ Y x w,( ),( )Z x w θ ξ y,( ), ,( ) 2 γ2 w 2–+ 0≤
x ξ w, ,( ) W x( ) U x 0,( )=
K x W xT x( ) w** x W x
T x( ),( ) y* x W xT x( ),( ), , ,( ) 0≤
W x x( )X x w 0, ,( ) Uξ x 0,( )η 0 Y x w,( ),( ) Z x w 0, ,( ) 2 γ2 w 2–+ + 0≤
2 Derivation of the Controller 13 2.3 Output Feedback Controller
Since the function vanishes at y = 0, a vector of smooth functions exists such that
and therefore
.
With , this may be written as
.
Let denote the solution of
and set in the previous inequality:
.
Expression (2.3.5) then shows that
■
2.3.2 The Output Injection Gain
Theorem 2.2: Output feedback controller
Consider the plant (2.1.1) and suppose that
i) Assumptions A1 to A5 hold,
ii) inequality (2.2.3) has a smooth solution ,
iii) the inequality
(2.3.8)
has a smooth solution ,
iv) ,
v) the Hessian matrix of
is nonsingular at x = 0, and the equation
(2.3.9)
has a smooth solution G(x).
Then, the problem of local L2 gain synthesis is solved by the output feedback
η 0 y,( ) P x y,( )
Uξ x 0,( )η 0 y,( ) P– T x y,( )y=
W x x( )X x w 0, ,( ) PT x Y x w,( ),( )Y x w,( )– Z x w 0, ,( ) 2 γ2 w 2–+ 0≤
w w x W xT x( ) y, ,( )=
K x W xT x( ) w x W x
T x( ) y, ,( ) P x Y x w x W xT x( ) y, ,( ),( ),( ), , ,( ) 0≤
y x( )
y x( ) P x Y x w x W xT x( ) y x( ), ,( ),( ),( )=
y y x( )=
K x W xT x( ) w x W x
T x( ) y x( ), ,( ) y x( ), , ,( ) 0≤
K x W xT x( ) w x W x
T x( ) y* x W xT x( ),( ), ,( ) y* x W x
T x( ),( ), , ,( )
K x W xT x( ) w** x W x
T x( ),( ) y* x W xT x( ),( ), , ,( ) 0.≤=
V x( ) 0 x 0 V 0( ),≠∀> 0=
K x W xT x( ) w** x W x
T x( ),( ) y* x W xT x( ),( ), , ,( ) H x V x
T x( ) v∗ x V x x( ),( ), ,( )– 0<
W x( ) 0 x 0≠∀> W 0( ), 0=
W x x( ) V x x( )– 0> x 0≠∀
K x W xT x( ) w** x W x
T x( ),( ) y* x W xT x( ),( ), , ,( ) H x V x
T x( ) v∗ x V x x( ),( ), ,( )–
W x( ) V x( )–( )G x( ) y*T x W x
T x( ),( )=
ξ X ξ w∗ ξ V ξT ξ( ),( ) u∗ ξ V ξ
T ξ( ),( ), ,( ) G ξ( ) y Y ξ w∗ ξ V ξT ξ( ),( ),( )–( )+=
u u∗ ξ V ξT ξ( ),( ).=
2 Derivation of the Controller 14 2.3 Output Feedback Controller
Proof:
Set and define
satisfies
where M(x) is a matrix of smooth functions which is negative definite at x = 0 (due to Assumptions iiiand v of Theorem 2.2).
Define and
.
With this function it will be proven that the closed-loop system
has the following two properties:
a) It satisfies the dissipativity condition
.
b) It has a locally asymptotically stable equilibrium at .
Q x( ) W x( ) V x( )–=
S x w,( ) Qx x( ) X x w 0, ,( ) G x( )Y x w,( )–( ) H x V xT x( ) w
0, ,( ) H x V x
T x( ) v∗ x V xT x( ),( ), ,( ).–+=
S x w,( )
S x w,( ) W x x( )X x w 0, ,( ) y*T x W x
T x( ),( )Y x w,( )– V x x( )X x w 0, ,( )– +=
H x V xT x( ) w
0, ,( ) H x V x
T x( ) v∗ x V x x( ),( ), ,( )–+
W x x( )X x w 0, ,( ) y*T x W x
T x( ),( )Y x w,( )– Z x w 0, ,( ) 2 γ2 w 2–+ +=
H x V xT x( ) v∗ x V x x( ),( ), ,( )–
K x W xT x( ) w y* x W x
T x( ),( ), , ,( ) H x V xT x( ) v∗ x V x x( ),( ), ,( )–=
K x W xT x( ) w** x W x
T x( ),( ) y* x W xT x( ),( ), , ,( ) H x V x
T x( ) v∗ x V x x( ),( ), ,( )–≤
xT M x( )x=
xe x
ξ=
U xe( ) Q x ξ–( ) V x( )+=
xe Xe xe w,( )X x w u∗ ξ V ξ
T ξ( ),( ), ,( )
X ξ w∗ ξ V ξT ξ( ),( ) u∗ ξ V ξ
T ξ( ),( ), ,( ) G ξ( ) Y x w,( ) Y ξ w∗ ξ V ξT ξ( ),( ),( )–( )+
= =
z Ze xe w,( ) Z x w u∗ ξ V ξT ξ( ),( ), ,( )= =
Uxe xe( )Xe xe w,( ) Ze xe w,( ) 2 γ2 w 2–+ 0<
xe 0=
2 Derivation of the Controller 15 2.3 Output Feedback Controller
For a, consider
(2.3.10)
In a neighborhood of , a function exists such that
where is the right-hand side of inequality (2.3.10). Then
for all in a neighborhood of (0, 0, 0), since the Hessian of L is negative definite:
due to and being zero and due to Assumption A2. Thus, in this neighborhood,
,
and the function locally is given by
Uxe xe( )Xe xe w,( ) Ze xe w,( ) 2 γ2 w 2–+
Qx x ξ–( ) X x w u∗ ξ V ξT ξ( ),( ), ,( ) X ξ w∗ ξ V ξ
T ξ( ),( ) u∗ ξ V ξT ξ( ),( ), ,( )– +[=
G ξ( ) Y x w,( ) Y ξ w∗ ξ V ξT ξ( ),( ),( )–( )– ] V x x( )X x w u∗ ξ V ξ
T ξ( ),( ), ,( )+
Z x w u∗ ξ V ξT ξ( ),( ), ,( ) 2 γ2 w 2–+
Qx x ξ–( ) X x w u∗ ξ V ξT ξ( ),( ), ,( ) X ξ w∗ ξ V ξ
T ξ( ),( ) u∗ ξ V ξT ξ( ),( ), ,( )– +[=
G ξ( ) Y x w,( ) Y ξ w∗ ξ V ξT ξ( ),( ),( )–( )– ] H x V x
T x( )w
u∗ ξ VξT ξ( ),( )
, ,( )+
Qx x ξ–( ) X x w u∗ ξ V ξT ξ( ),( ), ,( ) X ξ w∗ ξ V ξ
T ξ( ),( ) u∗ ξ V ξT ξ( ),( ), ,( )– +[≤
G ξ( ) Y x w,( ) Y ξ w∗ ξ V ξT ξ( ),( ),( )–( )– ] H x V x
T x( )w
u∗ ξ VξT ξ( ),( )
, ,( )+
H x V xT x( ) v∗ x V x x( ),( ), ,( ).–
x ξ,( ) 0 0,( )= w x ξ,( )
Lw x ξ w, ,( )w w x ξ,( )=
0= w 0 0,( ) 0=
L x ξ w, ,( )
L x ξ w, ,( ) L x ξ w x ξ,( ), ,( )≤x ξ w, ,( )
Lww x ξ w, ,( ) 2 D11T D11 γ2I–( ) 0<=
w2
2
∂∂
Qx x ξ–( ) X x w u∗, ,( ) G ξ( )Y x w,( )–( ) V x x( ) X x w u∗, ,( )( ) ZT Z γ2wT w–( )+ +( )x ξ w, ,( ) 0 0 0, ,( )=
=
w2
2
∂∂
W x 0( ) V x 0( )–( ) X x w u∗, ,( ) G 0( )Y x w,( )–( ) V x 0( ) X x w u∗, ,( )( )+( )x ξ w, ,( ) 0 0 0, ,( )=
2 D11T D11 γ2I–( )+=
V x 0( ) W x 0( )
Uxe xe( )Xe xe w,( ) Ze xe w,( ) 2 γ2 w 2–+ L x ξ w x ξ,( ), ,( )≤
w x ξ,( )
w x ξ,( )w2
2
∂∂
L x ξ w, ,( )
1–
0 0 0, ,( )xT
x∂∂
w∂∂
L x ξ w, ,( )
0 0 0, ,( )
+
–=
ξTξ∂
∂w∂∂
L x ξ w, ,( )
0 0 0, ,( )
+ T
12--- D11
T D11 γ2I–( ) 1–– B1T D21
T GT 0( )–( )Qxx 0( ) x ξ–( ) +(=
B1T V xx 0( ) 2D11
T C1+( )x 2D11T D12F2ξ–+ )
2 Derivation of the Controller 16 2.3 Output Feedback Controller
Moreover, in a neighborhood of , can be written as
(2.3.11)
In order to prove this, set and define
.
Then, (2.3.11) holds since and .
since and
in a neighborhood of .
since H is minimized w.r.t. u at u*.
The matrix consists of smooth functions and satisfies
.
x∂∂
w∂∂
L x ξ w, ,( )
0 0 0, ,( )x∂
∂Qx x ξ–( )
w∂∂
X x w u∗, ,( ) G ξ( )w∂∂
Y x w,( )– V x x( )
w∂∂
X x w u∗, ,( ) + +
=
w∂∂
ZT Z γ2wT w–( )+ T
T
0 0 0, ,( )
B1T D21
T GT 0( )–( )Qxx 0( ) 0 B1T V xx 0( ) 0 2D11
T C1+ + + +( )T=
ξ∂∂
w∂∂
L x ξ w, ,( )
0 0 0, ,( )ξ∂
∂Qx x ξ–( )
w∂∂
X x w u∗, ,( ) G ξ( )w∂∂
Y x w,( )– V x x( )
w∂∂
X x w u∗, ,( ) + +
=
w∂∂
ZT Z γ2wT w–( )+ T
T
0 0 0, ,( )
B1T D21
T GT 0( )–( )Qxx 0( ) 2D11T D12F2+( )T–=
x ξ,( ) 0 0,( )= L x ξ w x ξ,( ), ,( )
L x ξ w x ξ,( ), ,( ) x ξ–( )T R x ξ,( ) x ξ–( )=
e x ξ–=
H e ξ,( ) L x ξ w x ξ,( ), ,( )x e ξ+=
=
H 0 ξ,( ) 0= He e ξ,( )e 0=
0=
H 0 ξ,( ) L x ξ w x ξ,( ), ,( )x ξ=
=
Qx 0( ) X x w u∗, ,( ) X ξ w∗ u∗, ,( )– G ξ( ) Y x w,( ) Y ξ w∗,( )–( )–[ ]x ξ=
+=
H x V xT x( ) w
u∗, ,( ) H x V x
T x( ) v∗ x V x x( ),( ), ,( )–
x ξ=
+
0=
Qx 0( ) 0=
w ξ ξ,( ) 12--- D11
T D11 γ2I–( ) 1–– B1T V xx 0( ) 2D11
T C1+( )x 2D11T D12F2ξ–( )
x ξ==
w∗ ξ V ξT ξ( ),( )=
x ξ 0= =
He e ξ,( )e 0=
Lx x ξ w x ξ,( ), ,( )x ξ=
=
X x w u∗, ,( ) X ξ w∗ u∗, ,( )– G ξ( ) Y x w,( ) Y ξ w∗,( )–( )–[ ] T Qxx x ξ–( ) +=
Qx x ξ–( ) Xx x w u∗, ,( ) G ξ( )Y x x w,( )+[ ] Hx x V xT x( ) w
u∗, ,( ) Hx x V x
T x( ) v∗ x V x x( ),( ), ,( )–+ +
x ξ=
Hu x V xT w
u, ,( )u*x x V x
T x( ),( )
x ξ=
=
0=
R x ξ,( )
R 0 0,( ) M 0( )=
2 Derivation of the Controller 17 2.3 Output Feedback Controller
With written as (see remark on p. 18 below)
we get
Thus
Hence, is negative definite in the neighborhood of (0, 0), and property a follows.
In order to prove asymptotic stability (property b), set w = 0. Then we conclude stability from prop-erty a which yields
M 0( )12--- K xx x W x
T w** y*, , ,( ) Hxx x V xT v*, ,( )–( )
0( )=
12--- Xx
T x w** 0, ,( )W xx 0( ) W xx 0( )Xx x w** 0, ,( ) Y xT x w**,( )y*x– y*x
T Y x x w**,( )–+ 2ZxT x w** 0, ,( )Zx x w** 0, ,( )+ +[=
2γ2w**xT 0 0,( )w**x 0 0,( )– Hxx x V x
T v*, ,( )– ]x 0=
12--- A B1w**x 0 0,( )+( )T W xx 0( )
12---W xx 0( ) A B1w**x 0 0,( )+( ) 1
2--- C2 D21w**x 0 0,( )+( )T y*x 0( )–+ +=
12---y*x
T 0( ) C2 D21w**x 0 0,( )+( )– C1 D11w**x 0 0,( )+( )T C1 D11w**x 0 0,( )+( ) γ2w**xT 0 0,( )w**x 0 0,( )–+ +
12---Hxx x V x
T v*, ,( )0( )
–
R 0 0,( )12---Hee e ξ,( )
0 0,( )=
12---Lxx x ξ w x ξ,( ), ,( )
0 0,( )=
12--- Xx x w 0, ,( ) G ξ( )Y x x w,( )–[ ] T Qxx 0( ) Qxx 0( ) Xx x w 0, ,( ) G ξ( )Y x x w,( )–[ ]+ +
=
Hxx x V xT x( ) w
u∗, ,( ) Hxx x V x
T v*, ,( )–+
0 0,( )
12--- A B1wx G 0( ) C2 D21wx+( )–+( )T Qxx 0( )
12---Qxx 0( ) A B1wx G 0( ) C2 D21wx+( )–+( )+ +=
12--- A B1wx+( )T V xx 0( )
12---V xx 0( ) A B1wx+( ) C1 D11wx+( )T C1 D11wx+( ) γ2wx
T wx–+ + + +
12---Hxx x V x
T v*, ,( )0( )
–
G 0( )
G 0( ) Qxx1– 0( )y*x
T 0 0,( )=
2Qxx1– 0( ) C2 D21R1
1– D11T C1
12---B1
T W xx 0( )+ –
TD21R1
1– D21T( ) 1– ,–=
wx 0 0,( ) 12---R
1
1–B1
T D21T GT 0( )–( )Qxx 0( ) B1
T V xx 0( ) 2D11T C1++( )–=
R11– 1
2---B1
T Qxx 0( ) D21T D21R1
1– D21T( ) 1– C2 D21R1
1– D11T C1
12---B1
T W xx 0( )+ –
12---B1
T V xx 0( ) D11T C1++ +
–=
R11– D11
T C112---B1
T W xx 0( ) D21T D21R1
1– D21T( ) 1– C2 D21R1
1– D11T C1
12---B1
T W xx 0( )+ –
+ + –=
w**x 0 0,( ).=
R 0 0,( ) =
12--- A B1w**x+( )T W xx 0( )
12---W xx 0( ) A B1w**x+( ) C1 D11w**x+( )T C1 D11w**x+( ) γ2w**x
T w**x–+ + +=
12--- C2 D21w**x+( )T y*x 0 0,( )–
12---y*x
T 0 0,( ) C2 D21w**x+( )–12---Hxx x V x
T v*, ,( )0( )
–
M 0( )=
R x ξ,( )
2 Derivation of the Controller 18 2.3 Output Feedback Controller
.
Asymptotic stability can be shown by considering a trajectory which yields
for all t ≥ 0. (2.3.12)
From Assumption A5, it follows that
and from A3 that the function which yields
and
is unique. Hence, (2.3.12) implies that
.
Now, it is sufficient to show that
(2.3.13)
is asymptotically stable. For this purpose, set in the definition of . Then
shows that Q(x) is a Lyapunov function for (2.3.13).■
Remarks:
As pointed out in [13], the observer gain G(x) which is implicitly defined in (2.3.9) can be com-puted by extracting xT from and from :
(2.3.14)
where R(x) and L(x) are defined by
.
Note that V(x) is required to be positive definite rather than only nonnegative definite. Positive def-initeness is needed to prove stability, but it is not necessary for establishing the norm bound to hold ifthe system is known to be stable (see Section 2.1.2). This is well known from linear H∞ synthesiswhere the solution to one of the Riccati equations may be zero if the plant is stable (e.g., [6], chapter7).
The two signals and can be interpreted as follows. As seen in Section2.3.1, maximizes the Hamiltonian K while minimizes it. The interpretation therefore is simi-lar to that for the state-feedback case: is the worst-case exogenous input which tries to increasethe norm of the controlled variable z. The control signal this time is not u but , which stabilizes theplant and reduces the influence of w on z by output injection.
tdd
U xe t( )( ) Ze xe 0,( ) 2– 0≤ ≤
xe t( )
Ze xe t( ) 0,( ) Z x t( ) 0 u* ξ V ξT ξ( ),( ), ,( ) 0= =
x t( )t ∞→lim 0=
u u x( )=
Z x 0 u x( ), ,( ) 0= u 0( ) 0=
u* ξ t( ) V ξT ξ t( )( ),( )
t ∞→lim 0=
x X x w* x V xT x( ),( ) 0, ,( ) G x( )Y x w* x V x
T x( ),( ),( )–=
w w* x V xT x( ),( )= S x w,( )
0 S x w* x V xT x( ),( ),( ) Qx x( ) X x w* x V x
T x( ),( ) 0, ,( ) G x( )Y x w* x V xT x( ),( ),( )–( )≥>
W x x( ) V x x( )– y*T x W x
T x( ),( )
G x( ) L 1– x( )R x( )=
W x x( ) V x x( )– xT L x( )=
y*T x W x
T x( ),( ) xT R x( )=
w** x W xT x( ),( ) y* x W x
T x( ),( )w** y*
w**y*
3 Approximated Controller 19
3 Approximated Controller
The Hamilton-Jacobi-Isaacs inequalities cannot be solved explicitly, in general. However, follow-ing the work of Lukes [15], it is possible to compute an approximate solution based on series expan-sions which can be used for finding an approximate control law. Lukes has done this for optimalregulators, and several authors have since pointed out that the same idea may be used for the H∞problem (e.g., [13], [14], [16]).
The approximation of the lowest order1 corresponds to the linear problem. It yields an approxima-tion of first order for the control law and of second order for the storage function V(x).
Notation: The series expansions for and V(x) are denoted as follows:
.
As pointed out in [16], each term in these expansions is of the form
with .
Denote the vector consisting of all possible terms of order d (without coefficients) as x(d), i.e., x(1)
and x(2) with n = 3 are given by
.
Now, the scalar homogeneous function of order d can be written as
where CV is a row vector of the same length as x(d) containing the coefficients.
For derivatives, stands for
and thus is of order d–1 in x.
Similar approximations are used for the functions involved in the observer design.
1. The term “order” in connection with approximation does not refer to the dimension of the state vector butrather to the order of the Taylor approximation of each function. Sometimes, we use the expression “approxima-tion order” to clearly distinguish this notion from the other.
v∗ x( )
v∗ x( ) v∗1( ) x( ) v∗
2( ) x( ) …+ + v∗d( ) x( )
d 1=
∞
∑= =
V x( ) V 2( ) x( ) V 3( ) x( ) …+ + V d 1+( ) x( )d 1=
∞
∑= =
cx1i1x2
i2···xnin i1 i2 … in+ + + d=
x 1( ) x1 x2 x3
T=
x 2( ) x12 x1x2 x1x3 x2
2 x2x3 x32
T=
V d( ) x( )
V d( ) x( ) CV x d( )=
V xd( ) x( )
V xd( ) x( )
x∂∂
V d( ) x( )( )=
3 Approximated Controller 20 3.1 State Feedback Controller
3.1 State Feedback Controller
The two basic equations (2.2.3) and (2.2.2), where for the former the equality rather than the ine-quality is considered, may be written as:
(3.1.1)
. (3.1.2)
Step-by-step approximations of the solutions to these two equations are given in the following sub-sections.
3.1.1 Lowest Order Approximation: The Linear H∞ Problem
For the linearized system
with
the solution to the H∞ problem is well known [7]. The storage function V(x) is given by
and the optimum by
(3.1.3)
where K is the solution to (3.1.1):
Since this equality must hold for all x, it can be written as the Riccati equation
(3.1.4)
with
and .
V x x( )X x v∗ x V xT x( ),( ),( ) ZT x v∗ x V x
T x( ),( ),( )Z x v∗ x V xT x( ),( ),( )+ +
v∗T x V x
T x( ),( ) γ2Im10
0 0v∗ x V x
T x( ),( )– 0=
λTv∂
∂X x v,( )
v∂∂
ZT x v,( )Z x v,( )( ) 2vT γ2Im10
0 0–+
λ V xT x( ) v v∗ x V x
T x( ),( )=,=
0=
x Ax Bv+=
z C1x D1•v+=
Ax∂
∂X x v,( )
0 0,( )=
C1 x∂∂
Z x v,( )0 0,( )
=
Bv∂
∂X x v,( )
0 0,( )=
D1• v∂∂
Z x v,( )0 0,( )
=
V 2( ) x( ) xT Kx=
v∗
v∗1( ) Fx– R 1– BT K D1•
T C1+( )x–= =
2xT K A BF–( )x xT C1T C1x 2xT C1
T D1•Fx– xT FT D1•T D1•Fx γ2xT FT Im1
0
0 0Fx–+ + 0 .=
A BR 1– D1•T C1–( )T K K A BR 1– D1•
T C1–( ) KBR 1– BT K– Q+ + 0=
R D1•T D1•
γ2Im10
0 0–= Q C1
T C1 C1T D1•R
1– D1•T C1–=
3 Approximated Controller 21 3.1 State Feedback Controller
3.1.2 Higher Order Approximations
With the linearized plant given above, the plant dynamics (2.2.1) may be rewritten as
with the supply rate –s(w, z)
With these definitions of f and g1, with the feedback law (3.1.3), and with
,
the equations (3.1.1) and (3.1.2) read:
.
Solving the first of these equations for and the second for yields:
(3.1.5)
(3.1.6)
Equation (3.1.5) written as a power series of terms up to order m is given by:
and its mth-order term, i.e., the difference between the approximations of order m and m – 1, by:
(3.1.7)
x Ax Bv f x v,( )+ +=
zT z vT γ2Im10
0 0v– xT C1
T C1x 2xT C1T D1•v vT D1•
T D1•v g1 x v,( ) vT γ2Im10
0 0v–+ + +=
xT C1T C1x 2xT C1
T D1•v vT Rv g1 x v,( ).+ + +=
v∗ x( ) v∗ x V xT x( ),( )=
V x x( ) A BF–( )x B v∗ x( ) Fx+( ) f x v∗ x( ),( )+ +[ ] xT C1T C1x+ +
2xT C1T D1•v∗ x( ) v∗
T x( )Rv∗ x( ) g1 x v∗ x( ),( )+ + + 0=
2xT C1T D1• 2v∗
T x( )Rv∂
∂g1 x v,( )
v v∗ x( )=
V x x( ) Bv∂
∂f x v,( )
v v∗ x( )=
+ + + + 0=
V x x( ) A BF–( )x v∗
V x x( ) A BF–( )x V x x( ) B v∗ x( ) Fx+( ) f x v∗ x( ),( )+( )– +=
xT C1T C1x– 2xT C1
T D1•v∗ x( )– v∗T x( )Rv∗ x( )– g1 x v∗ x( ),( )–
v∗ x( )12---R 1– 2D1•
T C1xv∂
∂g1 x v,( )
v v∗ x( )= T
Bv∂
∂f x v,( )
v v∗ x( )=
+ T
V xT x( )+ +
–=
V xd 1+( ) x( )
d 1=
m 1–
∑
A BF–( )x =
V xd 1+( ) x( )
j 1=
m d–
∑d 1=
m 2–
∑ B v∗ x( ) Fx+( ) f x v∗ x( ),( )+[ ] j( )– g1d( ) x v∗ x( ),( )
d 1=
m
∑– +
xT C1T C1x– 2xT C1
T D1• v∗d( ) x( )
d 1=
m 1–
∑– v∗T d( ) x( )Rv∗
j( ) x( )j 1=
m d–
∑d 1=
m 1–
∑– m 3 4 …, ,=
V xm( ) x( ) A BF–( )x =
V xd 1+( ) x( )
d 1=
m 2–
∑ B v∗ x( ) Fx+( ) f x v∗ x( ),( )+[ ] m d–( )– g1m( ) x v∗ x( ),( )– +
2xT C1T D1•v∗
m 1–( ) x( )– v∗T d( ) x( )Rv∗
m d–( ) x( )d 1=
m 1–
∑– m 3 4 …, ,=
3 Approximated Controller 22 3.1 State Feedback Controller
Equation (3.1.6) as a power series of terms up to order k is given by:
and its kth-order term:
(3.1.8)
Note that
(3.1.9)
(3.1.10)
since f(x, v) and are power series starting with terms in (x, v) of order two and three, respec-tively (for f, must be of higher order or a multiplication of x and must occur because the linearterm with is already considered in B ). Hence, equation (3.1.7) is independent of , itscoefficient being
Thus
(3.1.11)
where the convention
is adopted.
v∗d( ) x( )
d 1=
k
∑ 12---R 1– 2D1•
T C1xv∂
∂g1 x v,( )
T d( )
v v∗ x( )=d 2=
k
∑ BT V xd 1+( ) x( )( )T
d 1=
k
∑
++ +
–=
v∂
∂f x v,( )
T d( )
v v∗ x( )=
V xj 1+( ) x( )( )T
j 1=
k d–
∑d 1=
k 1–
∑+
k 2 3 …, ,=
v∗k( ) x( )
12---R 1–
v∂∂
g1 x v,( ) T k( )
v v∗ x( )=
BT V xk 1+( ) x( )( )T ++
–=
v∂
∂f x v,( )
T d( )
v v∗ x( )=
V xk d– 1+( ) x( )( )T
d 1=
k 1–
∑+
k 2 3 …, ,=
f j( ) x v∗d( ) x( )
d 1=
∞
∑,( ) f j( ) x v∗d( ) x( )
d 1=
j 1–
∑,( )=
g1m( ) x v∗
d( ) x( )d 1=
∞
∑,( ) g1m( ) x v∗
d( ) x( )d 1=
m 2–
∑,( )=
g1 x v,( )v∗ v∗
v∗ v∗ v∗m 1–( ) x( )
V x2( ) x( )B 2xT C1
T D1• 2v∗T 1( ) x( )R+ +( )– 2xT KB C1
T D1• FT R–+( )–=
2xT KB C1T D1• KB C1
T D1•+( )R 1– R–+( )– 0.= =
V xm( ) x( ) A BF–( )x =
V xd 1+( ) x( )
d 2=
m 2–
∑ Bv∗m d–( ) x( )– V x
d 1+( ) x( )d 1=
m 2–
∑ f m d–( ) x v∗ x( ),( )– +
g1m( ) x v∗ x( ),( )– v∗
T d( ) x( )Rv∗m d–( ) x( )
d 2=
m 2–
∑– m 3 4 …, ,=
k
l
∑ 0= for l k<
3 Approximated Controller 23 3.2 Output Feedback Controller
The right-hand side of (3.1.11) depends on the first (m–2) terms of and on the first (m–1)terms of V(x), while the right-hand side of (3.1.8) is determined by the first (k–1) terms of andthe first (k+1) terms of V(x). Therefore, V(x) and can be approximated by consecutively com-puting
This computation does not have to be done in the way its feasibility is derived. Since Taylor approx-imations have to be computed in every step anyway, the easiest way to compute V is the following:
(3.1.12)
Similarly, for :
(3.1.13)
For both of these equations, V and on the right-hand sides stand for the sums over all termsalready computed.
3.2 Output Feedback Controller
As a result of the computations of the state feedback controller, and V(x) are available, and can be computed which is a prerequisite for the solution of the second
Hamilton-Jacobi-Isaacs inequality (2.3.8). In order to ensure that (2.3.8) is a strict inequality,wemust modify it by an additional term Φ:
(3.2.1)
where
For reasons which will become clear in Section 3.3, Φ is chosen to be
where . Moreover, condition iv of Theorem 2.2 can be enforced to hold by choosing ϕ suffi-ciently large.
Solving the second HJI equation is similar to solving the first one, since equation (3.2.1) has thesame structure as (3.1.1):
(3.2.2)
v∗ x( )v∗ x( )
v∗ x( )
V 2( ) v∗1( ) V 3( ) v∗
2( ) V 4( ) v∗3( ) …, , , , , ,
V xm( ) x( ) A BF–( )x V x x( )Bv∗ x( )– V x x( ) f x v∗ x( ),( )– g1 x v∗ x( ),( )– v∗
T x( )Rv∗ x( )–[ ] m( )=
m 3 4 …, ,=
v∗
v∗k( ) x( )
12---R 1–
v∂∂
g1 x v,( ) T
v v∗ x( )=
BT V xT x( )
v∂∂
f x v,( ) T
v v∗ x( )=
V xT x( )+ +
k( )
–=
k 2 3 …, ,=
v∗
v∗ x( )H x V x
T x( ) v∗ x V x x( ),( ), ,( )
K x W xT x( ) w** x W x
T x( ),( ) y* x W xT x( ),( ), , ,( ) H x V x
T x( ) v∗ x V x x( ),( ), ,( )– Φ x( )+ 0=
Φ x( ) 0> x 0≠∀Φ 0( ) 0.=
Φ x( ) ϕW xT x( )W x x( )=
ϕ 0>
W x x( )X x w** x W xT x( ),( ) 0, ,( ) y*
T x W xT x( ),( )Y x w** x W x
T x( ),( ),( )– +
ZT x w** x W xT x( ),( ) 0, ,( )Z x w** x W x
T x( ),( ) 0, ,( ) γ2w**T x W x
T x( ),( )w** x W xT x( ),( )–+ +
H x V xT x( ) v∗ x V x x( ),( ), ,( )– Φ x( )+ 0=
3 Approximated Controller 24 3.2 Output Feedback Controller
The expression corresponding to (3.1.2) now consists of two equations, (2.3.1) and (2.3.3):
(3.2.3)
and
(3.2.4)
3.2.1 Lowest Order Approximation
Equation (3.2.2) leads to the Riccati equation for the second HJI equation if it is approximated withsecond order terms. With the ansatz , , it reads
(3.2.5)
where and
With the shorthand notation
and
,
from (2.3.4), equation (2.3.2):
reads
w∂∂
K x W xT x( ) w y, , ,( )
w w x W xT x( ) y, ,( )=
0= =
W x x( )w∂∂
X x w 0, ,( ) yTw∂∂
Y x w,( )– 2ZT x w 0, ,( )w∂∂
Z x w 0, ,( ) 2γ2wT–+
w w x W xT x( ) y, ,( )=
y∂∂
K x W xT x( ) w x W x
T x( ) y, ,( ) y, , ,( )y y* x W x
T x( ),( )=
0= =
W x x( )w∂∂
X x w 0, ,( )y∂
∂w Y T x w,( )– yT
w∂∂
Y x w,( )y∂
∂w– +
2ZT x w 0, ,( )w∂∂
Z x w 0, ,( )y∂
∂w 2γ2wT
y∂∂
w–+
y y* x W xT x( ),( )=
W 2( ) x( ) xT Px= p W x2( )T x( ) 2Px= =
2xT P Ax B1w+( ) yT x( ) C2x D21w+( )– C1x D11w+( )T C1x D11w+( )+ +
γ2wT w– xT hx– 4xT PφPx+ 0=
xT hx H 2( ) x V xT x( ) v∗ x V x x( ),( ), ,( )=
B1 w∂∂
X x w u, ,( )0 0 0, ,( )
=
D11 w∂∂
Z x w u, ,( )0 0 0, ,( )
=
C2 x∂∂
Y x w,( )0 0,( )
=
D21 w∂∂
Y x w,( )0 0,( )
.=
R1 D11T D11 γ2I–=
y*1( ) x 2Px,( ) 2 D21R1
1– D21T( ) 1– C2 D21R1
1– D11T C1–( )x D21R1
1– B1T Px–( )–=
w 1( ) x 2Px y, ,( ) R11– D11
T C1x B1T Px
12---D21
T y–+ –=
3 Approximated Controller 25 3.2 Output Feedback Controller
such that equation (3.2.5) may be written as
(3.2.6)
where
Equation (3.2.6) is not yet the Riccati equation we need to solve because the solution P would sta-bilize
which is an expression for state feedback rather than output injection. As in the derivation of [10,Chapter 5] for the linear case, (3.2.6) must be multiplied by P–1 from both sides in order to yield theRiccati equation (in P–1) which is relevant for the observer problem. The Riccati equation to besolved is thus
. (3.2.7)
Based on equation (2.3.14), the observer gain matrix for the linearized problem is then given by
.
3.2.2 Higher Order Approximations
With the previous definitions of f and g1 and with
,
the equations (3.2.2), (3.2.3), and (3.2.4) read as follows:
w**1( ) x 2Px,( ) R1
1– D11T C1x B1
T Px D21T D21R1
1– D21T( ) 1– ×+ +(–=
C2 D21R11– D11
T C1–( )x D21R11– B1
T Px–( ) )
0 PAe AeT P PReP Qe+ + +=
Ae A B1R11– D11
T C1 D21T D21R1
1– D21T( ) 1– C2 D21R1
1– D11T C1–( )+( )–=
Re B1 R11–– R1
1– D21T D21R1
1– D21T( ) 1– D21R1
1–+( )B1T 4ϕ In+=
Qe C2 D21R11– D11
T C1–( )T D21R11– D21
T( ) 1– C2 D21R11– D11
T C1–( ) +=
C1T D11R1
1– D11T C1– C1
T C1+ h.–
Ae ReP+
0 AeP 1– P 1– AeT P 1– QeP 1– Re+ + +=
G12---– P K–( ) 1– 2 D21R1
1– D21T( ) 1– C2 D21R1
1– D11T C1– D21R1
1– B1T P–( )[ ] T=
P K–( ) 1– C2 D21R11– D11
T C1 B1T P+( )–( )T D21R1
1– D21T( ) 1––=
w** x( ) w** x W xT x( ),( )=
W x x( ) Ax B1w**1( ) x( ) GC2x– B1 w** x( ) w**
1( ) x( )–( ) GC2x f x w** x( )
0,( )+ + + +
+
y*T x W x
T x( ),( )Y x w** x( ),( )– +
xT C1T C1x 2xT C1
T D11w** x( ) w**T x( )R1w** x( ) g1 x w** x( )
0,( )+ + + + +
H x V xT x( ) v∗ x V x x( ),( ), ,( )– Φ x( )+ 0=
3 Approximated Controller 26 3.2 Output Feedback Controller
(3.2.8)
Solving the first of these equations for and the second for yields:
(3.2.9)
(3.2.10)
In order to solve (3.2.8) for , define g2, g3, and g4 by
such that
2xT C1T D11 2wT x W x
T x( ) y, ,( )R1 w∂∂
g1 x w
0,( )
w w x W xT x( ) y, ,( )=
+ + +
yTw∂∂
Y x w,( )
w w x W xT x( ) y, ,( )=
– +
W x x( ) B1 w∂∂
f x w
0,( )
w w x W xT x( ) y, ,( )=
+ + 0=
W x x( )w∂∂
X x w 0, ,( )y∂
∂w Y T x w,( )– yT
w∂∂
Y x w,( )y∂
∂w– +
2xT C1T D11 2wT R1 w∂
∂g1 x w
0,( )+ +
y∂
∂w+
y y* x W xT x( ),( )=
0.=
W x x( ) Ax B1w**1( ) x( ) GC2x–+( ) w
W x x( ) Ax B1w**1( ) x( ) GC2x–+( ) =
W– x x( ) B1 w** x( ) w**1( ) x( )–( ) GC2x f x w** x( )
0,( )+ +
+
y*T x W x
T x( ),( )Y x w** x( ),( )+ +
xT C1T C1x 2xT C1
T D11w** x( ) w**T x( )R1w** x( ) g1 x w** x( )
0,( )+ + +
– +
H x V xT x( ) v∗ x V x x( ),( ), ,( ) Φ x( )–+
w x W xT x( ) y, ,( )
12---R1
1– 2D11T C1x
w∂∂
g1 x w
0,( )
w w x W xT x( ) y, ,( )=
T
+ +–=
w∂∂
Y x w,( )w w x W x
T x( ) y, ,( )= T
y– +
B1 w∂∂
f x w
0,( )
w w x W xT x( ) y, ,( )=
+ T
W xT x( )+
y*
Y x w,( ) C2x12---D21R1
1– D21T y g2 x y,( )+ +=
w∂∂
Y x w,( )y∂
∂w
12---D21R1
1– D21T g3 x w,( )+=
2wT R1 y∂∂
w12---yT D21R1
1– D21T g4 x y,( )+=
3 Approximated Controller 27 3.2 Output Feedback Controller
and hence
(3.2.11)
The mth-order term of (3.2.9) is given by:
(3.2.12)
0 W x x( )w∂∂
X x w 0, ,( )y∂
∂w xT C2
T–12---yT D21R1
1– D21T– g2
T x y,( )– +=
yT 12---D21R1
1– D21T g3 x w,( )+
– +
2xT C1T D11 w∂
∂g1 x w
0,( )+
y∂
∂w
12---yT D21R1
1– D21T g4 x y,( )+ + +
y y* x W xT x( ),( )=
y* x W xT x( ),( ) 2 D21R1
1– D21T( ) 1–
y∂∂
w T
W x x( )w∂∂
X x w 0, ,( ) +=
2xT C1T D11 w∂
∂g1 x w
0,( )+
T+ +
C2x– g2 x y,( )– g3T x w,( )y– g4
T x y,( )+
y y* x W xT x( ),( )=
W xm( ) x( ) Ax B1w**
1( ) x( ) GC2x–+( ) =
W xd 1+( ) x( ) B1 w** x( ) w**
1( ) x( )–( ) GC2x f x w** x( )
0,( )+ +
m d–( )
d 1=
m 2–
∑– +
y*T d( ) x W x
T x( ),( )Y m d–( ) x w** x( ),( )d 1=
m 1–
∑+ +
2xT C1T D11w**
m 1–( ) x( ) w**T d( ) x( )R1w**
m d–( ) x( )d 1=
m 1–
∑ g1m( ) x w** x( )
0,( )+ +
– +
H x V xT x( ) v∗ x V x x( ),( ), ,( ) Φ x( )–[ ] m( )+ m 3 4 …, ,=
3 Approximated Controller 28 3.2 Output Feedback Controller
The kth-order terms of (3.2.10) and (3.2.11) thus read:
(3.2.13)
(3.2.14)
The signal can then be calculated from .
Due to (3.1.9) and (3.1.10), equation (3.2.12) is independent of , its coefficient being
Hence, (3.2.12) may be rewritten as follows:
(3.2.15)
The right-hand side of equation (3.2.13) depends on of terms up to order k+1 in x and on of terms up to order k–1. The right-hand side of (3.2.14) depends on the same terms
w k( ) x W xT x( ) y, ,( )
12---R1
1–w∂∂
g1 x w
0,( )
w w x W xT x( ) y, ,( )=
T k( )
+
–=
w∂∂
Y x w,( )w w x W x
T x( ) y, ,( )= T
yk( )
– B1T W x
k 1+( ) x( )( )T+ +
w∂∂
f x w
0,( )
w w x W xT x( ) y, ,( )=
T d( )
W xk d– 1+( ) x( )( )T
d 1=
k 1–
∑+
k 2 3 …, ,=
y*k( ) x W x
T x( ),( ) 2 D21R11– D21
T( ) 1–y∂
∂w
TW x x( )
w∂∂
X x w 0, ,( ) +
=
2xT C1T D11 w∂
∂g1 x w
0,( )+
T+ +
g2 x y,( )– g3T x w,( )y– g4
T x y,( )+
y y* x W xT x( ),( )=
k( )
k 2 3 …, ,=
w∗∗k( ) x( ) w k( ) x W x
T x( ) y* x W xT x( ),( ), ,( )= y*
k( )
w∗∗m 1–( ) x( )
W x2( ) x( )B1– y*
T 1( ) x( )D21 2xT C1T D11– 2w**
T 1( ) x( )R1–+ =
2xT PB1 C2 D21R11– D11
T C1– D21R11– B1
T P–( )T D21R11– D21
T( ) 1– D21 C1T D11+ + +
–=
D11T C1 B1
T P D21T D21R1
1– D21T( ) 1– C2 D21R1
1– D11T C1– D21R1
1– B1T P–( )+ +[ ] T R1
1– R1–
0=
W xm( ) x( ) Ax B1w**
1( ) x( ) GC2x–+( ) =
W xd 1+( ) x( )B1w**
m d–( ) x( )d 2=
m 2–
∑– W xd 1+( ) x( ) f m d–( ) x w** x( )
0,( )
d 1=
m 2–
∑– +
y*T d( ) x W x
T x( ),( )Y m d–( ) x w** x( ),( )d 1=
m 1–
∑+ +
w**T d( ) x( )R1w**
m d–( ) x( )d 2=
m 2–
∑– g1m( ) x w** x( )
0,( )– +
H x V xT x( ) v∗ x V x x( ),( ), ,( ) Φ x( )–[ ] m( )+ m 3 4 …, ,=
W x( )w x W x
T x( ) y, ,( )
3 Approximated Controller 29 3.3 Alternative Output Feedback Controller
as those of and on terms up to order k–1 of . Thus, W(x), , and can beapproximated by consecutively computing
···
Again, this computation does not have to be done in the way its feasibility is derived, but rather onthe basis of the following:
(3.2.16)
(3.2.17)
For both of these equations, W(x), and on the right-hand sides are the sums overall terms already computed. Equation (3.2.14) has already a form suitable for computation.
3.3 Alternative Output Feedback Controller
Instead of directly solving the equations derived in Section 2.3, the variables are changed first sothat the equations can be given in terms of the multiplicator p rather than in terms of x. The advan-tage of this change of variables is that the correct Riccati equation will be obtained directly. (Proba-bly, all the equations could be directly derived in this form.) Thus
and .
As before, the HJI equation (2.3.8) is modified by an additional term Φ in order to ensure that it isa strict inequality:
(3.3.1)
where
W x( ) y* y* x W xT x( ),( ) w** x( )
W 2( ) w 1( ) y, *1( ) w**
1( ), ,
W 3( ) w 2( ) y*2( ) w**
2( ), , ,
W 4( ) w 3( ) y*3( ) w**
3( ), , ,
W xm( ) x( ) Ax B1w**
1( ) x( ) GC2x–+( ) =
W x x( )B1w** x( )– W x x( ) f x w** x( ) 0, ,( )– y*T x W x
T x( ),( )Y x w** x( ),( )+ +
w**T x( )R1w** x( )– g1 x w** x( )
0,( )– H x V x
T x( ) v∗ x V x x( ),( ), ,( ) Φ x( )–+m( )
m 3 4 …, ,=
w k( ) x W xT x( ) y, ,( )
12---R1
1–w∂∂
g1 x w
0,( ) yT
w∂∂
Y x w,( )– +–=
W x x( )w∂∂
X x w 0, ,( )+ T
w w x W xT x( ) y, ,( )=
k( )
k 2 3 …, ,=
y* x W xT x( ),( ) w** x( )
x W pT p( )= W x
T x( ) p=
K W pT p( ) p w** W p
T p( ) p,( ) y* W pT p( ) p,( ), , ,( ) +
H x V xT x( ) v∗ x V x x( ),( ), ,( )
x W pT p( )=
Φ p( )+– 0=
Φ p( ) 0> p 0≠∀Φ 0( ) 0.=
3 Approximated Controller 30 3.3 Alternative Output Feedback Controller
In fact, Φ may be chosen to be
where is a positive definite matrix. This explains why Φ had been chosen that way in theprevious subsection. As before, condition iv of Theorem 2.2 can be enforced to hold by choosing Φsufficiently large.
Solving the second HJI equation is similar to solving the first one since equation (3.3.1) has thesame structure as (3.1.1):
(3.3.2)
The expression corresponding to (3.1.2) now consists of the two equations (2.3.1) and (2.3.3):
(3.3.3)
(3.3.4)
The output injection gain for the dynamic controller
now can be computed as
with L and R defined by
Φ p( ) pT φp=
φ Rn n×∈
pX x w** W pT p( ) p,( ) 0, ,( ) y*
T W pT p( ) p,( )Y x w** W p
T p( ) p,( ),( )– +
ZT W pT p( ) w** W p
T p( ) p,( ) 0, ,( )Z W pT p( ) w** W p
T p( ) p,( ) 0, ,( )+ +
γ2w**T W p
T p( ) p,( )w** W pT p( ) p,( )– +
H x V xT x( ) v∗ x V x x( ),( ), ,( )
x W pT p( )=
Φ p( )+– 0=
w∂∂
K W pT p( ) p w y, , ,( )
w w W pT p( ) p y, ,( )=
0= =
pw∂∂
X W pT p( ) w 0, ,( ) yT
w∂∂
Y W pT p( ) w,( )– +
2ZT W pT p( ) w 0, ,( )
w∂∂
Z W pT p( ) w 0, ,( ) 2γ2wT–+
w w W pT p( ) p y, ,( )=
y∂∂
K W pT p( ) p w W p
T p( ) p y, ,( ) y, , ,( )y y* W p
T p( ) p,( )=
0= =
pw∂∂
X W pT p( ) w 0, ,( )
y∂∂
w Y T W pT p( ) w,( )– yT
w∂∂
Y W pT p( ) w,( )
y∂∂
w– +
2ZT W pT p( ) w 0, ,( )
w∂∂
Z W pT p( ) w 0, ,( )
y∂∂
w 2γ2wTy∂
∂w–+
y y* W pT p( ) p,( )=
G p( )
p W pp1– p( ) X x w* x V x
T x( ),( ) u* x V xT x( ),( ), ,( ) G p( ) y Y x w* x V x
T x( ),( ),( )–( )+[ ]x W p
T p( )==
u u* x V xT x( ),( )
x W pT p( )=
=
G p( ) L 1– p( )R p( )=
pT V x x( )x W p
T p( )=– pT L p( )=
y*T W p
T p( ) p,( ) pT R p( )=
3 Approximated Controller 31 3.3 Alternative Output Feedback Controller
(cf. (2.3.14)).
3.3.1 Lowest Order Approximation
Equation (3.3.2) leads to the Riccati equation for the second HJI equation if it is approximated withsecond order terms. With the ansatz , , it reads
(3.3.5)
where .
With
,
from (2.3.4), equation (2.3.2):
reads
such that equation (3.3.5) may be written as
(3.3.6)
where
The observer gain matrix for the linearized problem then is given by
.
3.3.2 Higher Order Approximations
With the previous definition of g1 and with
,
the equations (3.3.2), (3.3.3), and (3.3.4) read as follows:
W 2( ) p( ) pT Pp= x W p2( )T p( ) 2Pp= =
pT 2APp B1w+( ) yT 2C2Pp D21w+( )– 2C1Pp D11w+( )T 2C1Pp D11w+( )+ +
γ2wT w– 4 pT PhPp– pT φp+ 0=
xT hx H 2( ) x V xT x( ) v∗ x V x x( ),( ), ,( )=
y*1( ) 2Pp p,( ) D21R1
1– D21T( ) 1– 4 C2 D21R1
1– D11T C1–( )Pp D21R1
1– B1T p–( )–=
w 1( ) 2Pp p y, ,( ) R11– 2D11
T C1Pp12---B1
T p12---D21
T y–+ –=
w**1( ) 2Pp p,( ) R1
1– 2D11T C1Pp
12---B1
T p D21T D21R1
1– D21T( ) 1– ×+ +
–=
2 C2 D21R11– D11
T C1–( )Pp12---D21R1
1– B1T p–
0 PAeT AeP PReP Qe+ + +=
Ae A B1R11– D11
T C1 D21T D21R1
1– D21T( ) 1– C2 D21R1
1– D11T C1–( )+( )–=
Re 4 C2 D21R11– D11
T C1–( )T D21R11– D21
T( ) 1– C2 D21R11– D11
T C1–( ) +[=
C1T D11R1
1– D11T C1– C1
T C1+ h– ]
Qe14---B1 R1
1–– R11– D21
T D21R11– D21
T( ) 1– D21R11–+( )B1
T φ.+=
G I 4PK–( ) 1– B1R11– D21
T 4P C1T D11R1
1– D21T C2–( )+( ) D21R1
1– D21T( ) 1–=
x Ax f x w u, ,( )+=
w** p( ) w** W pT p( ) p,( )=
3 Approximated Controller 32 3.3 Alternative Output Feedback Controller
(3.3.7)
Solving the first of these equations for and the second for yields
(3.3.8)
(3.3.9)
In order to solve (3.3.7) for , define g2, g3, and g4 as
pT AW pT p( ) GC2W p
T p( )– GC2W pT p( ) f W p
T p( ) w** p( ) 0, ,( )+ +[ ] +
y*T W p
T p( ) p,( )Y W pT p( ) w** p( ),( )– +
W p p( )C1T C1W p
T p( ) 2W p p( )C1T D11w** p( ) w**
T p( )R1w** p( )+ + + +
g1 p w** p( )
0,( ) H x V x
T x( ) v∗ x V x x( ),( ), ,( )x W p
T p( )=– Φ p( )+ + 0=
2W p p( )C1T D11 2wT W p
T p( ) p y, ,( )R1 w∂∂
g1 W pT p( ) w
0,( )
w w W pT p( ) p y, ,( )=
+ + +
yTw∂∂
Y W pT p( ) w,( )
w w W pT p( ) p y, ,( )=
– +
pTw∂∂
f W pT p( ) w 0, ,( )
w w W pT p( ) p y, ,( )=
+ 0=
pTw∂∂
X W pT p( ) w 0, ,( )
y∂∂
w Y T W pT p( ) w,( )– yT
w∂∂
Y W pT p( ) w,( )
y∂∂
w– +
2W p p( )C1T D11 2wT R1 w∂
∂g1 W p
T p( ) w
0,( )+ +
y∂
∂w+
y y* W pT p( ) p,( )=
0.=
pT A GC2–( )W pT p( ) w
pT A pT GC2–( )W pT p( ) =
pT– GC2W pT p( ) f W p
T p( ) w** p( ) 0, ,( )+[ ] +
y*T W p
T p( ) p,( )Y W pT p( ) w** p( ),( )+ +
W p p( )C1T C1W p
T p( )– 2W p p( )C1T D11w** p( )– w**
T p( )R1w** p( )– +
g1 W pT p( ) w** p( )
0,( )– H x V x
T x( ) v∗ x V x x( ),( ), ,( )x W p
T p( )=Φ p( )–+
w W pT p( ) p y, ,( )
12---R1
1– 2D11T C1W p
T p( )w∂∂
g1 W pT p( ) w
0,( )
w w W pT p( ) p y, ,( )=
T
+ +
–=
w∂∂
Y W pT p( ) w,( )
w w W pT p( ) p y, ,( )=
T
y– +
w∂∂
f W pT p( ) w 0, ,( )
w w W pT p( ) p y, ,( )=
T
p+
y*
Y x w,( ) C2x12---D21R1
1– D21T y g2 x y,( )+ +=
3 Approximated Controller 33 3.3 Alternative Output Feedback Controller
such that
and hence
(3.3.10)
The mth-order term of (3.3.8) is thus given by:
(3.3.11)
w∂∂
Y x w,( )y∂
∂w
12---D21R1
1– D21T g3 x w,( )+=
2wT R1 y∂∂
w12---yT D21R1
1– D21T g4 x y,( )+=
0 pTw∂∂
X W pT p( ) w 0, ,( )
y∂∂
w W p p( )C2T–
12---yT D21R1
1– D21T– g2
T W pT p( ) y,( )– +
=
yT 12---D21R1
1– D21T g3 W p
T p( ) w,( )+ – +
2W p p( )C1T D11 w∂
∂g1 W p
T p( ) w
0,( )+
y∂
∂w+ +
12---yT D21R1
1– D21T g4 W p
T p( ) y,( )+ +
y y* W pT p( ) p,( )=
y* W pT p( ) p,( ) 2 D21R1
1– D21T( ) 1–
y∂∂
w T
pTw∂∂
X W pT p( ) w 0, ,( ) +
=
2W p p( )C1T D11 w∂
∂g1 W p
T p( ) w
0,( )+
TC2W p
T p( )–+ +
g2 W pT p( ) y,( )– g3
T W pT p( ) w,( )y– g4
T W pT p( ) y,( )+
y y* W p
T p( ) p,( )=
pT A pT GC2–( )W pT m( ) p( ) =
pT– GC2W pT p( ) f W p
T p( ) w** p( ) 0, ,( )+[ ] m 1–( ) +
y*T d( ) W p
T p( ) p,( )Y m d–( ) W pT p( ) w** p( ),( )
d 1=
m 1–
∑+ +
W pd( ) p( )C1
T C1W pT m d–( ) p( )
d 1=
m 1–
∑– 2W pd( ) p( )C1
T D11w**m d–( ) p( )
d 1=
m 1–
∑– +
w**T d( ) p( )R1w**
m d–( ) p( )d 1=
m 1–
∑– g1m( ) W p
T p( ) w** p( )
0,( )– +
H x V xT x( ) v∗ x V x x( ),( ), ,( )
x W pT p( )=
Φ p( )– m( )
+ m 3 4 …, ,=
3 Approximated Controller 34 3.3 Alternative Output Feedback Controller
The kth-order terms of (3.3.9) and (3.3.10) read:
(3.3.12)
(3.3.13)
The signal can then be calculated.
Similar to (3.1.9), (3.1.10),
,
.
Hence, equation (3.3.11) is independent of , its coefficient being
w k( ) W pT p( ) p y, ,( )
12---R1
1– 2D11T C1W p
T k 1+( ) p( ) +
–=
w∂∂
g1 W pT p( ) w
0,( )
w w W pT p( ) p y, ,( )=
T k( )
+ +
w∂∂
Y W pT p( ) w,( )
w w W pT p( ) p y, ,( )=
T k( )
y– +
w∂∂
f W pT p( ) w 0, ,( )
w w W pT p( ) p y, ,( )=
T k 1–( )
p+
k 2 3 …, ,=
y*k( ) W p
T p( ) p,( ) 2 D21R11– D21
T( ) 1–y∂
∂w
TpT
w∂∂
X W pT p( ) w 0, ,( )
+
=
2W p p( )C1T D11 w∂
∂g1 W p
T p( ) w
0,( )
TC2W p
T p( )– g2 W pT p( ) y,( )–+ + +
g3T W p
T p( ) w,( )y– g4T W p
T p( ) y,( )+ )y y* W p
T p( ) p,( )= k( )
k 2 3 …, ,=
w∗∗k( ) p( ) w k( ) W p
T p( ) p y* W pT p( ) p,( ), ,( )=
pT f W pT d( ) p( )
d 1=
∞
∑ w** p( )d 1=
∞
∑ 0, ,( ) m( )
pT f m 1–( ) W pT d( ) p( )
d 1=
m 1–
∑ w**d( ) p( )
d 1=
m 1–
∑ 0, ,( )=
g1m( ) W p
T d( ) p( )d 1=
∞
∑ w∗ ∗d( ) x( )
0d 1=
∞
∑,( ) g1m( ) W p
T d( ) p( )d 2=
m 1–
∑ w∗ ∗d( ) x( )
0d 1=
m 2–
∑,( )=
w∗∗m 1–( ) p( )
pT B1– y*T 1( ) W p
T p( ) p,( )D21 2W p p( )C1T D11– 2w**
T 1( ) p( )R1–+ =
pT B1– 4 C2 D21R11– D11
T C1–( )P D21R11– B1
T–( )T D21R11– D21
T( ) 1– D21– +=
4PC1T D11– 2 2D11
T C1P12---B1
T D21T D21R1
1– D21T( ) 1– ×+ +
+
2 C2 D21R11– D11
T C1–( )P12---D21R1
1– B1T–
T
R11– R1
0=
3 Approximated Controller 35 3.3 Alternative Output Feedback Controller
The right-hand side of equation (3.3.12) depends on of terms up to order k+1 in p and on of terms up to order k–1. The right-hand side of (3.3.13) depends on the same terms
of and on terms up to order k–1 of . Thus, , , and can be approx-imated by consecutively computing
···
As before, this computation does not have to be done in the way its feasibility is derived, but ratheras follows:
(3.3.14)
(3.3.15)
For both of these equations, , , and on the right-hand sides are the sumsover all terms already computed. Equation (3.3.13) already has a form suitable for computation.
W p( )w W p
T p( ) p y, ,( )W p( ) y* W p( ) y* W p
T p( ) p,( ) w** p( )
W 2( ) w 1( ) y*1( ) w**
1( ), , ,
W 3( ) w 2( ) y*2( ) w**
2( ), , ,
W 4( ) w 3( ) y*3( ) w**
3( ), , ,
pT A pT GC2–( )W pT m( ) p( ) =
pT GC2W pT p( )– pT f W p
T p( ) w** p( ) 0, ,( )– y*T W p
T p( ) p,( )Y W pT p( ) w** p( ),( )+ +
w**T p( )R1w** p( )– W p p( )C1
T C1W pT p( )– g1 W p
T p( ) w** p( )
0,( )– +
H x V xT x( ) v∗ x V x x( ),( ), ,( )
x W pT p( )=
Φ p( )–+m( )
m 3 4 …, ,=
w k( ) x W xT x( ) y, ,( )
12---R1
1– 2xT C1T D11 w∂
∂+ g1 x w
0,( )( ) yT
w∂∂
Y x w,( )– +–=
pTw∂∂
f x w 0, ,( )+ T
x W pT p( )=
w w W pT p( ) p y, ,( )=
k( )
k 2 3 …, ,=
W p( ) y* W pT p( ) p,( ) w** p( )
4 Listings for M
aple V36
4.1 hinfSF: State Feedback
4 Listings for Maple V
This chapter contains the Maple V code which implements the algo-rithms developed above. The first three listings implement the statefeedback and the two approaches for the output feedback controllers.They all invoke the subroutines contained in Section 4.4 to solve thealgebraic Riccati equation and to improve the numerics by balancingthe controller.
The last section lists the code for converting the controllers to Ccoded s-functions for use with SIMULINK 1.3 and 2.0 (mex-files). Thisallows for simulations in SIMULINK and for implementation on DSPssuch as, e.g., the dSPACE systems by using MATLAB’s Real TimeWorkshop. Two versions of these conversions are available. The firstone writes code for general state space systems which hence do notnecessarily have to be controllers. The second one allows for codingoutput feedback controllers even if the inversion involved in the com-putation of the output injection gain (equation (2.3.14)) cannot becomputed symbolically due to expressions which contain too manyterms. The inversion is carried out on line by the code which isincluded in this last section as well.
The code is written for Maple V Release 2 (except for the state feed-back controller, which is written for Release 4) and should also runwith Release 3. The routines will be updated to Release 4 as soon as itbecomes available at the Washington University’s Department of Sys-tems Science and Mathematics. The routines which write the mex filescurrently rely on the UNIX operating system.
Why Maple? For conveniently dealing with nonlinear systems, a pro-gram for symbolic mathematical computations must be used, even ifthe goal is to solve the problem numerically. At ETH, there are basi-cally two such programs available: Maple and Mathematica. We pre-ferred Maple since it is somewhat integrated in MATLAB (SymbolicMath Toolbox). If it were completely integrated, MATLAB could beused for the numerical calculations while the commands of Maplewould be used for manipulating the equations.
The listings contain a section providing help on their usage whicheventually will be accessible by Maple’s help command (only inRelease 4 versions). An application of the procedures can be found inChapter 5.
4.1 hinfSF: State FeedbackhinfSF := proc() local eps, nargout, gamma, apxord, var, G, x, w, u, v, xv, X, Z, n, m1, m2, m, p1, i, j, pass, A, Ae, B, C1, D1dot, R, Q, F, res, ham, vstar, g1, V, grad_V, xkk, index, grad_g1, jacob_f, RHS, k, c_V, eq_V, A_V, ord, K, Tzw, wstar, x_list, indets_eq_V, to_be_assigned, tmp; description `FUNCTION: hinfSF`, ` numerical solution to the nonlinear state-feedback H_infproblem`, ` `, `CALLING SEQUENCE:`,
` hinfSF(G, var, apxord, gamma, nargout, eps)`, ` `, `PARAMETERS:`, ` G - generalized plant [[X(x,w,u)], [Z(x,w,u)]] where`, ` x_dot = X(x,w,u)`, ` z = Z(x,w,u)`, ` X and Z must be of type vector`, ` var - names of the variables used in G: var := [[x], [w], [u]]`, ` where x, w, and u must be of type vector`, ` apxord - approximation order for the controller (default: 3)`, ` gamma - upper bound for the L2-gain (default: 1)`, ` nargout - number of output arguments (default: 1) -- see Synopsis`, ` eps - tolerance for zero (default: 1e-10)`,
4 Listings for Maple V 37 4.1 hinfSF: State Feedback
L2-gain problem (H_inf problem)`,
`,
is a list containing`,
ller, Tzw is the closed-loop`,
excitation of the system.`,
returned.`,
lhf
`);
> 3 or args[5] <= 0 then
eger <= 3.`);
<= 0 then
r.`);
<= 0 then
ger.`);
parts [x, w, u].`);
vector)), i = 1..3)], `or`) then
ors.`);
(x,w,u)].`);
vector)), i = 1..2)], `or`) then
`);
w := op(2, var);
u := op(3, var);
X := op(1, G);
Z := op(2, G);
n := vectdim(x);
m1 := vectdim(w);
m2 := vectdim(u);
m := m1 + m2;
p1 := vectdim(Z);
readlib(mtaylor);
lprint(` Solving L2-gain problem`);
lprint(` =======================`);
print();
pass := true;
v := vector([seq(w[i], i = 1..m1), seq(u[i], i = 1..m2)]);
xv := [seq(x[i], i = 1..n), seq(v[i], i = 1..m)];
x_list := convert(x, list);
# controller
# first order approximation:
lprint(` approximation order:`, 1);
A := map(eval, subs({seq(xv[i] = 0., i = 1..n+m)}, jacobian(X, x)));
B := map(eval, subs({seq(xv[i] = 0., i = 1..n+m)}, jacobian(X, v)));
C1 := map(eval, subs({seq(xv[i] = 0., i = 1..n+m)}, jacobian(Z, x)));
D1dot := map(eval, subs({seq(xv[i] = 0., i = 1..n+m)}, jacobian(Z, v)));
R
:=
evalm(transpose(D1dot)&*D1dot
-diag(seq(gamma^2,i=1..m1),seq(0,i=1..m2)));
if max(op(singularvals(submatrix(D1dot, 1..p1, 1..m1)))) >= gamma then
lprint(` sigmamax(D11) < gamma: FAIL`);
pass := false;
else
lprint(` sigmamax(D11) < gamma: ok`);
fi;
if rank(R) < m then
lprint(` invertibility of R: FAIL`);
pass := false;
else
lprint(` invertibility of R: ok`);
fi;
print();
if pass then
Ae := evalm(A - &*(B, inverse(R), transpose(D1dot), C1));
Q := evalm(transpose(C1) &* C1
- &*(transpose(C1), D1dot, inverse(R), transpose(D1dot), C1));
ham := stack(augment(Ae, -&*(B, inverse(R), transpose(B))),
augment(-Q, -transpose(Ae)));
res := aresolve(ham, ‘eigen’, 2, eps);
if not(res[2] and definite(res[1], ‘positive_semidef’)) then
lprint(` Riccati equation: FAIL`);
pass := false;
else
lprint(` Riccati equation: ok`);
` `,
`SYNOPSIS:`,
` - Computes the solution to the nonlinear
` ||Z(x, w, u)||2 / ||w||2 < gamma
` `,
` - If nargout := 3, the output of hinfSF
` [K, Tzw, wstar] where K is the contro
` dynamics, and wstar is the worst-case
` `,
` - If nargout := 1 (default), only K is
` `;
#
# not optimized for speed! does not use eva
#
# Urs Christen, Jan 1997
if nargs < 6 then
eps := 1.0e-10;
elif not(type(args[6], numeric)) then
ERROR(`’eps’ must be a numerical value.
else
eps := args[6];
fi;
if nargs < 5 then
nargout := 1;
elif not(type(args[5], integer)) or args[5]
ERROR(`’nargout’ must be a positive int
else
nargout := args[5];
fi;
if nargs < 4 then
gamma := 1.;
elif not(type(args[4], numeric)) or args[4]
ERROR(`’gamma’ must be a positive numbe
else
gamma := args[4];
fi;
if nargs < 3 then
apxord := 3;
elif not(type(args[3], integer)) or args[3]
ERROR(`’apxord’ must be a positive inte
else
apxord := args[3];
fi;
if nargs < 2 then
ERROR(`not enough arguments!`);
elif not(nops(args[2]) = 3) then
ERROR(`’var’ must consist of the three
elif convert([seq(not(type(op(i, args[2]),
ERROR(`’var’ must consist of three vect
elif not(nops(args[1]) = 2) then
ERROR(`’G’ must consist of [X(x,w,u), Z
elif convert([seq(not(type(op(i, args[1]),
ERROR(`’G’ must consist of two vectors.
else
var := args[2];
G := args[1];
fi;
x := op(1, var);
4 Listings for Maple V 38 4.2 hinfOF_x: Output Feedback
(B) &* res[1]
(D1dot) &* C1));
x);
der + 1
, i = 1..n)]);
of x of order k+1 = 2
; (transpose(x), transpose(C1), C1,
ose(C1), D1dot, v)
e(D1dot), D1dot, v);
* x - B &* v), v));
d: order of vstar; ord+1: order of
]*x[j],
j
=
max(seq(index[op(k,
..nops(indets(xkk[i]))))..n), i =
vstar + X) + g1
nspose(vstar), R, vstar));
i = 1..m)}, RHS));
aylor(RHS, x_list, ord+1);
rad(multiply(transpose(c_V), xkk),
S);
istributed), x_list)};
tmp := {};
for i from 1 to nops(eq_V) do
if not type(eq_V[i], constant) then
tmp := {op(tmp), eq_V[i]};
fi;
od;
eq_V := tmp;
indets_eq_V := indets(eq_V);
to_be_assigned := convert(c_V, set) minus indets_eq_V;
assign(fsolve(eq_V, indets_eq_V));
assign({seq(to_be_assigned[i] = 0, i = 1 .. nops(to_be_assigned))});
V := V + multiply(transpose(c_V), xkk);
grad_V := grad(V, x); # of order ord
RHS := evalm(-0.5*inverse(R) &* (grad_g1 + (transpose(B)
+ jacob_f) &* grad_V));
RHS := map(eval, subs({seq(v[i] = vstar, i = 1..m)}, eval(RHS)));
vstar := vector([seq(vstar[i] + mtaylor(RHS[i], x_list, ord+1)
- mtaylor(RHS[i], x_list, ord), i = 1..m)]);
print();
od;
K := vector([seq(vstar[i], i = m1+1..m)]);
Tzw := [map(eval, subs({seq(u[i] = K[i], i = 1..m2)}, eval(X))),
map(eval, subs({seq(u[i] = K[i], i = 1..m2)}, eval(Z)))];
if nargout = 1 then
RETURN(eval(K));
elif nargout = 2 then
RETURN(eval([K, Tzw], 2));
else
wstar := vector([seq(vstar[i], i = 1..m1)]);
RETURN(eval([K, Tzw, wstar], 2));
fi;
end:
`help/text/hinfSF` := TEXT(op(5,op(1,hinfSF))):
k var, balflag, fileflag, filename,
xv, X, Z, Y, RHS, indets_eq_VW,
, B, C1, D1dot, R, Q, F, res, Psi,
ex, grad_g1, f, jacob_f, k, c_VW,
r, phi, x_list, K,
1, R1, R1i, DRD, DRDi, hstar, P,
b_X, wstarstar, grad_yY, jacob_Y,
r, L, dx, xi, Kxi, Tzw, threshold,
# description
# `FUNCTION: hinfOF_x:`,
# ` numerical solution to the nonlinear output-feedback H_inf
problem`,
# ` `,
# `CALLING SEQUENCE:`,
# ` hinfOF_x(G, var, apxord, gamma, nargout, eps, psi, phi, ordflag, balflag,
filename)`,
# ` `,
# `PARAMETERS:`,
# ` G - generalized plant [[X(x,w,u)], [Z(x,w,u)], [Y(x,w)]] where`,
# ` x_dot = X(x,w,u)`,
# ` z = Z(x,w,u)`,
# ` y = Y(x,w)`,
# ` X, Z, and Y must be of type vector`,
# ` var - names of the variables used in G: var := [[x], [w], [u]]`,
# ` where x, w, and u must be of type vector`,
F := evalm(inverse(R) &* (transpose
+ transpose
vstar := multiply(-F, x);
V := multiply(transpose(x), res[1],
grad_V := grad(V, x);
fi;
fi;
print();
# higher order approximations
# mtaylor: order must be desired or
xkk := vector([seq(seq(x[i]*x[j], j = i..n)
# terms
index := table([seq((x[i]) = i, i = 1..n)])
g1 := multiply(transpose(Z), Z) - multiply
x)
- 2*multiply(transpose(x), transp
- multiply(transpose(v), transpos
grad_g1 := grad(g1, v);
jacob_f := transpose(jacobian(evalm(X - A &
for ord from 2 to apxord while pass do # or
V lprint(` approximation order:`, ord);
xkk
:=
vector([seq(seq(xkk[i
indets(xkk[i]))],
k = 1
1..vectdim(xkk))]);
RHS := evalm(transpose(grad_V) &* (B &*
+ &*(tra
RHS := eval(subs({seq(v[i] = vstar[i],
RHS := mtaylor(RHS, x_list, ord+2) - mt
c_V := vector(vectdim(xkk));
eq_V := simplify(evalm(&*(transpose(g
x)),
(A - B &* F), x)) + RH
eq_V := {coeffs(collect(eq_V, x_list, d
4.2
hinfOF_x
: O
utpu
t F
eedb
achinfOF_x := proc()
local Phi, eps, nargout, gamma, apxord,
ordflag,
extract, tmp, G, x, w, u, v,
to_be_assigned,
n, m1, m2, m, p1, p2, i, j, pass, A, Ae
ham, vstar, g1, V, grad_V, xkk, ind
eq_VW,
ord, ustar, wstar, Xstar, Zstar, Hsta
B1, D11, D21, D21t, D11t, C2, eyem
ystar, y,
w_hat, wstarstar_1, W, grad_W, jaco
WXg,
g2, jacob_w, jacob_w_hat, g3, g4, Ysta
T, x_;
4 Listings for Maple V 39 4.2 hinfOF_x: Output Feedback
controller (default: 3)`,
(default: 1)`,
default: 1) -- see Synopsis`,
1e-10) -- not utilized yet!`,
first HJI to ensure its solution
ntly restricted to be a numerical
additional term (default: 0)`,
ult: 1e-8)`,
controller has terms up to order
ructed from the plant`,
proximation of the controller is
ansformation is applied to the`,
`,-file containing code for the`,
ith the name filename (must be a
urned by hinfOF_x`,
nonlinear L2-gain problem (H_inf
a`,
F_x is a list containing`,
nd Tzw is the closed-loop`,
returned.`,
the inversion necessary for the
carried out symbolically. Instead,
inversion numerically on-line.`,
else
ordflag := args[9];
fi;
if nargs < 8 then
Phi := 1.0e-8;
elif not(type(args[8], scalar) or type(args[8], numeric)) then
ERROR(`’Phi’ must be a scalar or a numerical value.`);
else
Phi := args[8];
fi;
if nargs < 7 then
Psi := 0.;
elif not(type(args[7], scalar) or type(args[7], numeric)) then
ERROR(`’Psi’ must be a scalar or a numerical value.`);
else
Psi := args[7];
fi;
if nargs < 6 then
eps := 1.0e-10;
elif not(type(args[6], numeric)) then
ERROR(`’eps’ must be a numerical value.`);
else
eps := args[6];
fi;
if nargs < 5 then
nargout := 1;
elif not(type(args[5], integer)) or args[5] > 3 or args[5] <= 0 then
ERROR(`’nargout’ must be a positive integer <= 3.`);
else
nargout := args[5];
fi;
if nargs < 4 then
gamma := 1.;
elif not(type(args[4], numeric)) or args[4] <= 0 then
ERROR(`’gamma’ must be a positive number.`);
else
gamma := args[4];
fi;
if nargs < 3 then
apxord := 3;
elif not(type(args[3], integer)) or args[3] <= 0 then
ERROR(`’apxord’ must be a positive integer.`);
else
apxord := args[3];
fi;
if nargs < 2 then
ERROR(`not enough arguments!`);
elif not(nops(args[2]) = 3) then
ERROR(`’var’ must consist of the three parts [x, w, u].`);
elif convert([seq(not(type(op(i, args[2]), vector)), i = 1..3)], `or`) then
ERROR(`’var’ must consist of three vectors.`);
elif not(nops(args[1]) = 3) then
ERROR(`’G’ must consist of [X(x,w,u), Z(x,w,u), [Y(x,w)]].`);
elif convert([seq(not(type(op(i, args[1]), vector)), i = 1..3)], `or`) then
ERROR(`’G’ must consist of three vectors.`);
else
var := args[2];
G := args[1];
fi;
# ` apxord - approximation order for the
# ` gamma - upper bound for the L2-gain
# ` nargout - number of output arguments (
# ` eps - tolerance for zero (default:
# ` psi - additional term for the
being`,
# ` positive definite; curre
scalar`,
# ` implying psi*x’*x being the
# ` phi - as psi but for 2nd HJI (defa
# ` ordflag - if true (default), the
apxord`,
# ` only; otherwise it is const
# ` balflag - if true, the linear ap
balanced;`,
# ` the resulting coordinate tr
# ` controller (default: false)
# ` filename- if specified, a Simulink mex
# ` controller is written w
string);`,
# ` in this case, nothing is ret
# ` `,
# `SYNOPSIS:`,
# ` - Computes the solution to the
problem)`,
# ` ||Z(x, w, u)||2 / ||w||2 < gamm
# ` `,
# ` - If nargout := 2, the output of hinfO
# ` [K, Tzw] where K is the controller a
# ` dynamics.`,
# ` `,
# ` - If nargout := 1 (default), only K is
# ` `,
# ` - If a filename is specified,
computation.`,
# ` of the output injection gain is not
code`,
# ` is generated which will compute this
# ` `;
# Urs Christen, May 1997
if nargs < 11 then
fileflag := false;
elif not(type(args[11], string)) then
ERROR(`’filename’ must be a string.`);
else
fileflag := true;
filename := args[11];
fi;
if nargs < 10 then
balflag := false;
elif not(type(args[10], boolean)) then
ERROR(`’balflag’ must be a boolean.`);
else
balflag := args[10];
fi;
if nargs < 9 then
ordflag := true;
elif not(type(args[9], boolean)) then
ERROR(`’ordflag’ must be a boolean.`);
4 Listings for Maple V 40 4.2 hinfOF_x: Output Feedback
then
number.`);
then
lar number.`);
ctor of indets from a vector of
1..ord)];
, ‘k’ = 1..ord);
V.3; for V.4, “add” should be used
, i = 1..m2)]);
..m)];
-13, i=1..n+m)}, X[j])), j=1..n);
d()*1e-13, i=1..n+m)}, Z[j])),
j=1..p1)};
d()*1e-13, i=1..n+m)}, Y[j])),
j=1..p2)};
alues:`, indets(tmp));
lprint(` =======================`);
lprint(` `);
print();
pass := true;
# controller
lprint(` * first HJI *`);
lprint(` `);
print();
# first order approximation:
lprint(` approximation order:`, 1);
A := map(eval, subs({seq(xv[i] = 0., i = 1..n+m)}, jacobian(X, x)));
B := map(eval, subs({seq(xv[i] = 0., i = 1..n+m)}, jacobian(X, v)));
C1 := map(eval, subs({seq(xv[i] = 0., i = 1..n+m)}, jacobian(Z, x)));
D1dot := map(eval, subs({seq(xv[i] = 0., i = 1..n+m)}, jacobian(Z, v)));
R
:=
evalm(transpose(D1dot)&*D1dot
-
diag(seq(gamma^2,i=1..m1),
seq(0,i=1..m2)));
if max(op(singularvals(submatrix(D1dot, 1..p1, 1..m1)))) >= gamma then
lprint(` sigmamax(D11) < gamma: FAIL`);
pass := false;
else
lprint(` sigmamax(D11) < gamma: ok`);
fi;
if rank(R) < m then
lprint(` invertibility of R: FAIL`);
pass := false;
else
lprint(` invertibility of R: ok`);
fi;
print();
if pass then
Ae := evalm(A - &*(B, inverse(R), transpose(D1dot), C1));
Q := evalm(Psi*&*() + transpose(C1) &* C1
- &*(transpose(C1), D1dot, inverse(R), transpose(D1dot), C1));
ham := stack(augment(Ae, -&*(B, inverse(R), transpose(B))),
augment(-Q, -transpose(Ae)));
res := aresolve(ham, ‘eigen’, 2, eps);
if not(res[2] and definite(res[1], ‘positive_semidef’)) then
lprint(` Riccati equation: FAIL`);
pass := false;
else
lprint(` Riccati equation: ok`);
K := res[1];
F := evalm(inverse(R)&*(transpose(B)&*K + transpose(D1dot)&*C1));
vstar := multiply(-F, x);
V := multiply(transpose(x), K, x);
grad_V := grad(V, x);
fi;
fi;
Ae := ‘Ae’; Q := ‘Q’; ham := ‘ham’; res := ‘res’;
print();
# higher order approximations
# mtaylor: order must be desired order + 1
x := op(1, var);
w := op(2, var);
u := op(3, var);
X := op(1, G);
Z := op(2, G);
Y := op(3, G);
n := vectdim(x);
m1 := vectdim(w);
m2 := vectdim(u);
m := m1 + m2;
p1 := vectdim(Z);
p2 := vectdim(Y);
if (not (type(Phi, scalar) and (Phi > 0)))
ERROR(`’Phi’ must be a positive scalar
fi;
if (not (type(Psi, scalar) and (Psi >= 0)))
ERROR(`’Psi’ must be a non-negative sca
fi;
readlib(mtaylor);
# procedure for the extraction of a ve
functions
extract := proc(f: vector, x: vector)
local m, n, A, i, a, j, ord, k, b;
m := vectdim(f);
n := vectdim(x);
A := matrix(m,n, 0.);
for i from 1 to m do
a := f[i];
for j from 1 to n do
a := collect(a, x[j]);
ord := degree(a, x[j]);
b := [seq(coeff(a, x[j]^k), k =
A[i,j] := sum(‘b[k]*x[j]^(k-1)’
# for Maple
a := simplify(a - A[i,j]*x[j]);
od;
od;
RETURN(eval(A));
end;
v := vector([seq(w[i], i = 1..m1), seq(u[i]
xv := [seq(x[i], i = 1..n), seq(v[i], i = 1
x_list := convert(x, list);
tmp := seq(indets(subs({seq(xv[i]=rand()*1e
tmp := {tmp, seq(indets(subs({seq(xv[i]=ran
tmp := {tmp, seq(indets(subs({seq(xv[i]=ran
if not (indets(tmp) = {}) then
ERROR(`Parameters must have numerical v
fi;
lprint(` Solving L2-gain problem`);
4 Listings for Maple V 41 4.2 hinfOF_x: Output Feedback
, i = 1..n)]);
# terms of x of order k+1 = 2
; (transpose(x), transpose(C1), C1,
ose(C1), D1dot, v)
e(D1dot), D1dot, v);
d: order of vstar; ord+1: order of
]*x[j],
j
=
max(seq(index[op(k,
..nops(indets(xkk[i]))))..n), i =
vstar + f) + g1
(transpose(vstar), R, vstar));
i = 1..m)}, RHS));
aylor(RHS, x_list, ord+1);
ad(multiply(transpose(c_VW), xkk),
S);
distributed), x_list)};
n nus indets_eq_VW;
1 .. nops(to_be_assigned))});
Digits)) * max(seq(abs(c_VW[i]),
; 1 + (transpose(B)
+ jacob_f) &* grad_V));
[i], i = 1..m)}, eval(RHS)));
(RHS[i], x_list, ord+1)
RHS[i], x_list, ord), i = 1..m)]);
’; indets_eq_VW := ‘indets_eq_VW’;
; ]);
], i = 1..m)}, eval(X)));
], i = 1..m)}, eval(Z)));
Hstar := evalm(transpose(grad_V) &* Xstar + transpose(Zstar) &* Zstar
- gamma^2 * transpose(wstar) &* wstar);
print(ustar_, ustar);
lprint(` `);
lprint(` * second HJI *`);
lprint(` `);
# first order approximation:
lprint(` approximation order:`, 1);
print();
B1 := submatrix(B, 1..n, 1..m1);
D11 := submatrix(D1dot, 1..p1, 1..m1);
D21 := map(eval, subs({seq(xv[i] = 0., i = 1..n+m1)}, jacobian(Y, w)));
D21t := transpose(D21);
D11t := transpose(D11);
C2 := map(eval, subs({seq(xv[i] = 0., i = 1..n+m1)}, jacobian(Y, x)));
eyem1 := diag(seq(1., i=1..m1));
R1 := evalm(D11t &* D11 - gamma^2 * eyem1);
R1i := inverse(R1);
DRD := evalm(&*(D21, R1i, D21t));
DRDi := inverse(DRD);
hstar := evalm(0.5 * map(eval, subs({seq(x[i] = 0., i = 1..n)},
hessian(Hstar, x))));
Ae := evalm(A - &*(B1, R1i, (D11t &* C1 + &*(D21t, DRDi,
(C2 - &*(D21, R1i, D11t, C1))))));
R
:=
evalm(&*(B1,
(-R1i
+
&*(R1i,
D21t,
DRDi,
D21,
R1i)),
transpose(B1))+4*Phi*&*());
Q := evalm(&*(transpose(C2 - &*(D21, R1i, D11t, C1)), DRDi,
(C2 - &*(D21, R1i, D11t, C1))) - &*(transpose(C1), D11, R1i,
D11t, C1) + &*(transpose(C1), C1) - hstar);
ham := stack(augment(transpose(Ae), Q), augment(-R, -Ae));
# Riccati equation for observer!
res := aresolve(ham, ‘eigen’, 2, eps);
if not(res[2] and definite(res[1], ‘positive_def’)) then
lprint(` Riccati equation: FAIL`);
pass := false;
else
lprint(` Riccati equation: ok`);
P := inverse(res[1]);
ystar := evalm(-2 * &*(DRDi,(C2 - &*(D21, R1i, (D11t &* C1
+ transpose(B1) &* P))), x));
y := vector([seq(y.i, i=1..p2)]);
w_hat := evalm(-R1i &* (&*(D11t, C1, x) + &*(transpose(B1), P, x)
- 0.5*D21t &* y));
wstarstar_1 := map(eval, subs({seq(y[i] = ystar[i], i = 1..p2)},
evalm(w_hat)));
G := evalm(-&*(inverse(P - K), transpose(C2 - &*(D21, R1i, (D11t &* C1
+ transpose(B1) &* P))), DRDi));
W := multiply(transpose(x), P, x);
grad_W := grad(W, x);
fi;
Ae := ‘Ae’; R := ‘R’; Q := ‘Q’; ham := ‘ham’; res := ‘res’;
print();
# higher order approximations
# mtaylor: order must be desired order + 1
xkk := vector([seq(seq(x[i]*x[j], j = i..n), i = 1..n)]);
# terms of x of order k+1 = 2
g1 := eval(subs({seq(u[i] = 0, i = 1..m2)}, g1));
xkk := vector([seq(seq(x[i]*x[j], j = i..n)
index := table([seq((x[i]) = i, i = 1..n)])
g1 := multiply(transpose(Z), Z) - multiply
x)
- 2*multiply(transpose(x), transp
- multiply(transpose(v), transpos
grad_g1 := grad(g1, v);
f := evalm(X - A &* x - B &* v);
jacob_f := transpose(jacobian(f, v));
for ord from 2 to apxord while pass do # or
V lprint(` approximation order:`, ord);
xkk
:=
vector([seq(seq(xkk[i
indets(xkk[i]))],
k = 1
1..vectdim(xkk))]);
RHS := evalm(transpose(grad_V) &* (B &*
+ &*
RHS := eval(subs({seq(v[i] = vstar[i],
RHS := mtaylor(RHS, x_list, ord+2) - mt
c_VW := vector(vectdim(xkk));
eq_VW := simplify(evalm(&*(transpose(gr
x)),
(A - B &* F), x)) + RH
eq_VW := {coeffs(collect(eq_VW, x_list,
tmp := {};
for i from 1 to nops(eq_VW) do
if not type(eq_VW[i], constant) the
tmp := {op(tmp), eq_VW[i]};
fi;
od;
eq_VW := tmp;
indets_eq_VW := indets(eq_VW);
to_be_assigned := convert(c_VW, set) mi
assign(fsolve(eq_VW, indets_eq_VW));
assign({seq(to_be_assigned[i] = 0, i =
threshold := min(eps, 1000.*10^(-
i=1..vectdim(c_VW)));
for i from 1 to vectdim(c_VW) do
if abs(c_VW[i]) < threshold then
c_VW[i] := 0;
fi;
od;
V := V + multiply(transpose(c_VW), xkk)
grad_V := grad(V, x); # of order ord
RHS := evalm(-0.5*inverse(R) &* (grad_g
RHS := map(eval, subs({seq(v[i] = vstar
vstar := vector([seq(vstar[i] + mtaylor
- mtaylor(
print();
od;
RHS := ‘RHS’; eq_VW := ‘eq_VW’; tmp := ‘tmp
wstar := vector([seq(vstar[i], i = 1..m1)])
ustar := vector([seq(vstar[i], i = m1+1..m)
Xstar := map(eval, subs({seq(v[i] = vstar[i
Zstar := map(eval, subs({seq(v[i] = vstar[i
4 Listings for Maple V 42 4.2 hinfOF_x: Output Feedback
0, i = 1..m2)}, jacobian(X, w))));
starstar, ystar; ord+1: order of W
]*x[j],
j
=
max(seq(index[op(k,
..nops(indets(xkk[i]))))..n), i =
(y[i] = ystar[i], i = 1..p2)},
* wstarstar + f)
g1 + &*(transpose(wstarstar),
Phi*transpose(grad_W)&*grad_W);
i], i = 1..m1),
m2)}, RHS));
aylor(RHS, x_list, ord+1);
d(multiply(transpose(c_VW), xkk),
B1 &* wstarstar_1)) + RHS);
distributed), x_list)};
n nus indets_eq_VW;
1 .. nops(to_be_assigned))});
Digits)) * max(seq(abs(c_VW[i]),
; ), w);
1);
));
i = 1..m1),
m2)}, RHS));
(RHS[i], x_list, ord+1)
HS[i], x_list, ord), i = 1..m1)]);
i], i = 1..m1)}, jacobian(Y, w)));
= 1..m1)},
5*DRD &* y)));
5*DRD);
, R1, w_hat) - 0.5*DRD &* y);
_w_hat) &* (WXg + 2 * &*(D11t, C1,
+ g4));
[i], i = 1..m1)}, eval(RHS)));
[i], i = 1..p2)}, eval(RHS)));
ystar := vector([seq(ystar[i] + mtaylor(RHS[i], x_list, ord+1)
- mtaylor(RHS[i], x_list, ord), i = 1..p2)]);
print();
od;
RHS := ‘RHS’; eq_VW := ‘eq_VW’; tmp := ‘tmp’; indets_eq_VW := ‘indets_eq_VW’;
print(V_, V);
print(W_, W);
if pass then
Ystar := map(eval, subs({seq(w[i] = wstar[i], i = 1..m1)}, eval(Y)));
# calculation of observer gain
lprint(` * calculation of output injection gain *`);
print();
L := transpose(extract(evalm(grad_W - grad_V), x));
R := transpose(extract(ystar, x));
if balflag then
lprint(` * balancing controller *`);
print();
A := evalm(A-B&*F-G&*C2);
T := sysbal(A, G, F);
x_ := evalm(T &* x);
ustar := map(eval, subs({seq(x[i] = x_[i], i = 1..n)}, eval(ustar)));
fi;
if fileflag then
G := matrix(n, p2);
dx := evalm(Xstar + G &* (y - Ystar));
if ordflag then
dx := vector([seq(mtaylor(dx[i], x_list, apxord+1), i = 1..n)]);
fi;
if balflag then
dx := evalm(inverse(T) &* dx);
dx := map(eval, subs({seq(x[i] = x_[i], i = 1..n)}, eval(dx)));
R := map(eval, subs({seq(x[i] = x_[i], i = 1..n)}, eval(R)));
L := map(eval, subs({seq(x[i] = x_[i], i = 1..n)}, eval(L)));
fi;
wrtMEXctrl(dx, R, L, ustar, x, y, G, filename);
lprint(` ** controller written to `.filename.`.c **`);
print();
RETURN();
else
G := linsolve(L, R);
# controller
K := [[evalm(Xstar + G &* (y - Ystar)), ustar], [x, y]];
if ordflag then
K := [[vector([seq(mtaylor(K[1][1][i],x_list,apxord+1),i=1..n)]),
vector([seq(mtaylor(K[1][2][i],x_list,apxord+1),i=1..m2)])], K[2]];
fi;
if balflag then
K := [[evalm(inverse(T) &* K[1][1]), K[1][2]], K[2]];
K := [[map(eval, subs({seq(x[i] = x_[i], i=1..n)},
eval(K[1][1]))),
K[1][2]], K[2]];
fi;
if nargout = 2 then
xi := vector([seq(xi.i, i=1..n)]);
Kxi := [map(eval, subs({seq(x[i] = xi[i], i = 1..n)},
{seq(y[i] = Y[i], i = 1..p2)}, eval(K[1][1]))),
map(eval, subs({seq(x[i] = xi[i], i = 1..n)},
grad_g1 := grad(g1, w);
jacob_X := transpose(eval(subs({seq(u[i] =
for ord from 2 to apxord while pass do
# ord: order of w
lprint(` approximation order:`, ord);
xkk
:=
vector([seq(seq(xkk[i
indets(xkk[i]))],
k = 1
1..vectdim(xkk))]);
wstarstar := map(eval, subs({seq
evalm(w_hat)));
RHS := evalm(transpose(grad_W) &* (B1 &
- transpose(ystar) &* Y +
R1, wstarstar) - Hstar +
RHS := eval(subs({seq(w[i] = wstarstar[
seq(u[i] = 0, i = 1..
RHS := mtaylor(RHS, x_list, ord+2) - mt
c_VW := vector(vectdim(xkk));
eq_VW := simplify(evalm(transpose(gra
x)) &*
((A - G &* C2) &* x +
eq_VW := {coeffs(collect(eq_VW, x_list,
tmp := {};
for i from 1 to nops(eq_VW) do
if not type(eq_VW[i], constant) the
tmp := {op(tmp), eq_VW[i]};
fi;
od;
eq_VW := tmp;
indets_eq_VW := indets(eq_VW);
to_be_assigned := convert(c_VW, set) mi
assign(fsolve(eq_VW, indets_eq_VW));
assign({seq(to_be_assigned[i] = 0, i =
threshold := min(eps, 1000.*10^(-
i=1..vectdim(c_VW)));
for i from 1 to vectdim(c_VW) do
if abs(c_VW[i]) < threshold then
c_VW[i] := 0;
fi;
od;
W := W + multiply(transpose(c_VW), xkk)
grad_W := grad(W, x); # of order ord
grad_yY := grad(evalm(transpose(y) &* Y
WXg := evalm(jacob_X &* grad_W + grad_g
RHS := evalm(-0.5*R1i &* (WXg - grad_yY
RHS := eval(subs({seq(w[i] = w_hat[i],
seq(u[i] = 0, i = 1..
w_hat := vector([seq(w_hat[i] + mtaylor
- mtaylor(R
jacob_Y := eval(subs({seq(w[i] = w_hat[
g2 := eval(subs({seq(w[i] = w_hat[i], i
evalm(Y - C2 &* x - 0.
jacob_w_hat := jacobian(w_hat, y);
g3 := evalm(jacob_Y &* jacob_w_hat - 0.
g4 := evalm(2*&*(transpose(jacob_w_hat)
RHS := evalm(2*DRDi &* (transpose(jacob
x))
- g2 - transpose(g3) &* y
RHS := map(eval, subs({seq(w[i] = w_hat
RHS := map(eval, subs({seq(y[i] = ystar
4 Listings for Maple V 43 4.3 hinfOF_p: Alternative Output Feedback
= 1..p2)}, eval(K[1][2])))];
seq(u[i] = Kxi[2][i], i = 1..m2)},
.n), seq(Kxi[1][j], j = 1..n)]),
eq(u[i] = Kxi[2][i], i = 1..m2)},
..n), seq(xi[i], i = 1..n)]), w]];
fi;
if nargout = 1 then
RETURN(eval(K, 2));
else
RETURN(eval([K, Tzw], 3));
fi;
end:
ut F
eedb
ack
var, balflag, fileflag, filename,
xv, X, Z, Y, RHS, indets_eq_VW,
, B, C1, D1dot, R, Q, F, res, Psi,
grad_g1, jacob_f, k, c_VW, eq_VW,
r, phi, x_list, K,
1, R1, R1i, DRD, DRDi, hstar, P,
b_X, wstarstar, grad_yY, jacob_Y,
r, L, Wpp, Wppi, dx, xi, Kxi, Tzw;
e nonlinear output-feedback H_inf
, eps, psi, phi, ordflag, balflag,
], [Z(x,w,u)], [Y(x,w)]] where`,
vector`,
in G: var := [[x], [w], [u]]`,
type vector`,
controller (default: 3)`,
(default: 1)`,
default: 1) -- see Synopsis`,
1e-10) -- not utilized yet!`,
first HJI to ensure its solution
ntly restricted to be a numerical
additional term (default: 0)`,
ult: 1e-8)`,
controller has terms up to order
# ` only; otherwise it is constructed from the plant`,
# ` balflag - if true, the linear approximation of the controller is
balanced;`,
# ` the resulting coordinate transformation is applied to the`,
# ` controller (default: false)`,
# ` filename- if specified, a Simulink mex-file containing code for the`,
# ` controller is written with the name filename (must be a
string);`,
# ` in this case, nothing is returned by hinfOF_p`,
# ` `,
# `SYNOPSIS:`,
# ` - Computes the solution to the nonlinear L2-gain problem (H_inf
problem)`,
# ` ||Z(x, w, u)||2 / ||w||2 < gamma`,
# ` `,
# ` - If nargout := 2, the output of hinfOF_p is a list containing`,
# ` [K, Tzw] where K is the controller and Tzw is the closed-loop`,
# ` dynamics.`,
# ` `,
# ` - The controller computed by hinfOF_p has the Lagrangian p as`,
# ` its state and all the computations involving the 2nd HJI are`,
# ` in p (rather than in x as in hinfOF_x).`,
# ` `;
# ` - If nargout := 1 (default), only K is returned.`,
# ` `,
# ` - If a filename is specified, the inversion necessary for the
computation.`,
# ` of the output injection gain is not carried out symbolically. Instead,
code`,
# ` is generated which will compute this inversion numerically on-line.`,
# ` `;
# Urs Christen, May 1997
if nargs < 11 then
fileflag := false;
elif not(type(args[11], string)) then
ERROR(`’filename’ must be a string.`);
else
fileflag := true;
filename := args[11];
fi;
if nargs < 10 then
balflag := false;
elif not(type(args[10], boolean)) then
{seq(y[i] = Y[i], i
Tzw := [[vector([seq(eval(subs({
X[j])), j = 1.
map(eval, subs({s
eval(Z)))],
[vector([seq(x[i], i = 1
fi;
fi;
else
K := [];
Tzw := [];
4.3
hinfOF_p
: Alt
erna
tive
Out
phinfOF := proc()
local Phi, eps, nargout, gamma, apxord,
ordflag,
extract, tmp, G, x, w, u, v,
to_be_assigned,
n, m1, m2, m, p1, p2, i, j, pass, A, Ae
ham, vstar, g1, V, grad_V, xkk, index,
ord, ustar, wstar, Xstar, Zstar, Hsta
B1, D11, D21, D21t, D11t, C2, eyem
ystar, y,
w_hat, wstarstar_1, W, grad_W, jaco
pXgDCx,
g2, jacob_w, jacob_w_hat, g3, g4, Ysta
# description
# `FUNCTION: hinfOF_x:`,
# ` numerical solution to th
problem`,
# ` `,
# `CALLING SEQUENCE:`,
# ` hinfOF_x(G, var, apxord, gamma, nargout
filename)`,
# ` `,
# `PARAMETERS:`,
# ` G - generalized plant [[X(x,w,u)
# ` x_dot = X(x,w,u)`,
# ` z = Z(x,w,u)`,
# ` y = Y(x,w)`,
# ` X, Z, and Y must be of type
# ` var - names of the variables used
# ` where x, w, and u must be of
# ` apxord - approximation order for the
# ` gamma - upper bound for the L2-gain
# ` nargout - number of output arguments (
# ` eps - tolerance for zero (default:
# ` psi - additional term for the
being`,
# ` positive definite; curre
scalar`,
# ` implying psi*x’*x being the
# ` phi - as psi but for 2nd HJI (defa
# ` ordflag - if true (default), the
apxord`,
4 Listings for Maple V 44 4.3 hinfOF_p: Alternative Output Feedback
[8], numeric)) then
rical value.`);
[7], numeric)) then
rical value.`);
`);
> 3 or args[5] <= 0 then
eger <= 3.`);
<= 0 then
r.`);
<= 0 then
ger.`);
parts [x, w, u].`);
vector)), i = 1..3)], `or`) then
ors.`);
ERROR(`’G’ must consist of [X(x,w,u), Z(x,w,u), [Y(x,w)]].`);
elif convert([seq(not(type(op(i, args[1]), vector)), i = 1..3)], `or`) then
ERROR(`’G’ must consist of three vectors.`);
else
var := args[2];
G := args[1];
fi;
x := op(1, var);
w := op(2, var);
u := op(3, var);
X := op(1, G);
Z := op(2, G);
Y := op(3, G);
n := vectdim(x);
m1 := vectdim(w);
m2 := vectdim(u);
m := m1 + m2;
p1 := vectdim(Z);
p2 := vectdim(Y);
if (not (type(Psi, scalar) and (Psi >= 0))) then
ERROR(`’Psi’ must be a non-negative scalar number.`);
fi;
if (type(Phi, numeric)) then
Phi := evalm(Phi * transpose(x) &* x);
fi;
readlib(mtaylor);
# procedure for the extraction of a vector of indets from a vector of
functions
extract := proc(f: vector, x: vector)
local m, n, A, i, a, j, ord, k, b;
m := vectdim(f);
n := vectdim(x);
A := matrix(m,n, 0.);
for i from 1 to m do
a := f[i];
for j from 1 to n do
a := collect(a, x[j]);
ord := degree(a, x[j]);
b := [seq(coeff(a, x[j]^k), k = 1..ord)];
A[i,j] := sum(‘b[k]*x[j]^(k-1)’, ‘k’ = 1..ord);
# for Maple V.3; for V.4, “add” should be used
a := simplify(a - A[i,j]*x[j]);
od;
od;
RETURN(eval(A));
end;
v := vector([seq(w[i], i = 1..m1), seq(u[i], i = 1..m2)]);
xv := [seq(x[i], i = 1..n), seq(v[i], i = 1..m)];
x_list := convert(x, list);
tmp := seq(indets(subs({seq(xv[i]=rand()*1e-13, i=1..n+m)}, X[j])), j=1..n);
tmp := {tmp, seq(indets(subs({seq(xv[i]=rand()*1e-13, i=1..n+m)}, Z[j])),
j=1..p1)};
ERROR(`’balflag’ must be a boolean.`);
else
balflag := args[10];
fi;
if nargs < 9 then
ordflag := true;
elif not(type(args[9], boolean)) then
ERROR(`’ordflag’ must be a boolean.`);
else
ordflag := args[9];
fi;
if nargs < 8 then
Phi := 1.0e-8;
elif not(type(args[8], scalar) or type(args
ERROR(`’Phi’ must be a scalar or a nume
else
Phi := args[8];
fi;
if nargs < 7 then
Psi := 1.0e-8;
elif not(type(args[7], scalar) or type(args
ERROR(`’Psi’ must be a scalar or a nume
else
Psi := args[7];
fi;
if nargs < 6 then
eps := 1.0e-10;
elif not(type(args[6], numeric)) then
ERROR(`’eps’ must be a numerical value.
else
eps := args[6];
fi;
if nargs < 5 then
nargout := 1;
elif not(type(args[5], integer)) or args[5]
ERROR(`’nargout’ must be a positive int
else
nargout := args[5];
fi;
if nargs < 4 then
gamma := 1.;
elif not(type(args[4], numeric)) or args[4]
ERROR(`’gamma’ must be a positive numbe
else
gamma := args[4];
fi;
if nargs < 3 then
apxord := 3;
elif not(type(args[3], integer)) or args[3]
ERROR(`’apxord’ must be a positive inte
else
apxord := args[3];
fi;
if nargs < 2 then
ERROR(`not enough arguments!`);
elif not(nops(args[2]) = 3) then
ERROR(`’var’ must consist of the three
elif convert([seq(not(type(op(i, args[2]),
ERROR(`’var’ must consist of three vect
elif not(nops(args[1]) = 3) then
4 Listings for Maple V 45 4.3 hinfOF_p: Alternative Output Feedback
d()*1e-13, i=1..n+m)}, Y[j])),
j=1..p2)};
alues:`, indets(tmp));
.n+m)}, jacobian(X, x)));
.n+m)}, jacobian(X, v)));
..n+m)}, jacobian(Z, x)));
= 1..n+m)}, jacobian(Z, v)));
t
-
diag(seq(gamma^2,i=1..m1),
p1, 1..m1)))) >= gamma then
FAIL`);
ok`);
FAIL`);
ok`);
pose(D1dot), C1));
C1
nverse(R), transpose(D1dot), C1));
(R), transpose(B))),
augment(-Q, -transpose(Ae)));
itive_semidef’)) then
FAIL`);
ok`);
)&*K + transpose(D1dot)&*C1));
Ae := ‘Ae’; Q := ‘Q’; ham := ‘ham’; res := ‘res’;
print();
# higher order approximations
# mtaylor: order must be desired order + 1
xkk := vector([seq(seq(x[i]*x[j], j = i..n), i = 1..n)]);
# terms of x of order k+1 = 2
index := table([seq((x[i]) = i, i = 1..n)]);
g1 := multiply(transpose(Z), Z) - multiply(transpose(x), transpose(C1), C1,
x)
- 2*multiply(transpose(x), transpose(C1), D1dot, v)
- multiply(transpose(v), transpose(D1dot), D1dot, v);
grad_g1 := grad(g1, v);
jacob_f := transpose(jacobian(evalm(X - A &* x - B &* v), v));
for ord from 2 to apxord while pass do # ord: order of vstar; ord+1: order of
V lprint(` approximation order:`, ord);
xkk
:=
vector([seq(seq(xkk[i]*x[j],
j
=
max(seq(index[op(k,
indets(xkk[i]))],
k = 1..nops(indets(xkk[i]))))..n), i =
1..vectdim(xkk))]);
RHS := evalm(transpose(grad_V) &* (B &* vstar + X) + g1
+ &*(transpose(vstar), R, vstar));
RHS := eval(subs({seq(v[i] = vstar[i], i = 1..m)}, RHS));
RHS := mtaylor(RHS, x_list, ord+2) - mtaylor(RHS, x_list, ord+1);
c_VW := vector(vectdim(xkk));
eq_VW := simplify(evalm(&*(transpose(grad(multiply(transpose(c_VW), xkk),
x)),
(A - B &* F), x)) + RHS);
eq_VW := {coeffs(collect(eq_VW, x_list, distributed), x_list)};
tmp := {};
for i from 1 to nops(eq_VW) do
if not type(eq_VW[i], constant) then
tmp := {op(tmp), eq_VW[i]};
fi;
od;
eq_VW := tmp;
indets_eq_VW := indets(eq_VW);
to_be_assigned := convert(c_VW, set) minus indets_eq_VW;
assign(fsolve(eq_VW, indets_eq_VW));
assign({seq(to_be_assigned[i] = 0, i = 1 .. nops(to_be_assigned))});
V := V + multiply(transpose(c_VW), xkk);
grad_V := grad(V, x); # of order ord
RHS := evalm(-0.5*inverse(R) &* (grad_g1 + (transpose(B)
+ jacob_f) &* grad_V));
RHS := map(eval, subs({seq(v[i] = vstar[i], i = 1..m)}, eval(RHS)));
vstar := vector([seq(vstar[i] + mtaylor(RHS[i], x_list, ord+1)
- mtaylor(RHS[i], x_list, ord), i = 1..m)]);
print();
od;
RHS := ‘RHS’; eq_VW := ‘eq_VW’; tmp := ‘tmp’; indets_eq_VW := ‘indets_eq_VW’;
xkk := ‘xkk’;
wstar := vector([seq(vstar[i], i = 1..m1)]);
ustar := vector([seq(vstar[i], i = m1+1..m)]);
Xstar := map(eval, subs({seq(v[i] = vstar[i], i = 1..m)}, eval(X)));
Zstar := map(eval, subs({seq(v[i] = vstar[i], i = 1..m)}, eval(Z)));
tmp := {tmp, seq(indets(subs({seq(xv[i]=ran
if not (indets(tmp) = {}) then
ERROR(`Parameters must have numerical v
fi;
lprint(` Solving L2-gain problem`);
lprint(` =======================`);
lprint(` `);
print();
pass := true;
# controller
lprint(` * first HJI *`);
lprint(` `);
print();
# first order approximation:
lprint(` approximation order:`, 1);
A := map(eval, subs({seq(xv[i] = 0., i = 1.
B := map(eval, subs({seq(xv[i] = 0., i = 1.
C1 := map(eval, subs({seq(xv[i] = 0., i = 1
D1dot := map(eval, subs({seq(xv[i] = 0., i
R
:=
evalm(transpose(D1dot)&*D1do
seq(0,i=1..m2)));
if max(op(singularvals(submatrix(D1dot, 1..
lprint(` sigmamax(D11) < gamma:
pass := false;
else
lprint(` sigmamax(D11) < gamma:
fi;
if rank(R) < m then
lprint(` invertibility of R:
pass := false;
else
lprint(` invertibility of R:
fi;
print();
if pass then
Ae := evalm(A - &*(B, inverse(R), trans
Q := evalm(Psi*&*() + transpose(C1) &*
- &*(transpose(C1), D1dot, i
ham := stack(augment(Ae, -&*(B, inverse
res := aresolve(ham, ‘eigen2’, 2, eps);
if not(res[2] and definite(res[1], ‘pos
lprint(` Riccati equation:
pass := false;
else
lprint(` Riccati equation:
K := res[1];
F := evalm(inverse(R)&*(transpose(B
vstar := multiply(-F, x);
V := multiply(transpose(x), K, x);
grad_V := grad(V, x);
fi;
fi;
4 Listings for Maple V 46 4.3 hinfOF_p: Alternative Output Feedback
transpose(Zstar) &* Zstar
&* wstar);
1..n+m1)}, jacobian(Y, w)));
..n+m1)}, jacobian(Y, x)));
i] = 0., i = 1..n)},
hessian(Hstar, x))));
= 0., i = 1..n)},
hessian(Phi, x))));
*(D21t, DRDi,
2 - &*(D21, R1i, D11t, C1))))));
R1i, D11t, C1)), DRDi,
&*(transpose(C1), D11, R1i,
) - hstar));
*(R1i, D21t, DRDi, D21, R1i)),
+ phi);
ment(-Q, -Ae));
Riccati equation for observer!
e_def’)) then
FAIL`);
ok`);
, R1i, D11t, C1)) &* P
(B1)), p));
P, p) + 0.5*transpose(B1) &* p
- 0.5*D21t &* y));
&*(B1, R1i, D21t) + 4*P &*
D21t) - transpose(C2)), DRDi));
’; res := ‘res’;
der + 1
pkk := vector([seq(seq(p[i]*p[j], j = i..n), i = 1..n)]);
# terms of p of order k+1 = 2
index := table([seq((p[i]) = i, i = 1..n)]);
g1 := eval(subs({seq(u[i] = 0, i = 1..m2)}, g1));
grad_g1 := grad(g1, w);
jacob_X := transpose(eval(subs({seq(u[i] = 0, i = 1..m2)}, jacobian(X, w))));
for ord from 2 to apxord while pass do
# ord: order of wstarstar, ystar; ord+1: order of W
lprint(` approximation order:`, ord);
pkk
:=
vector([seq(seq(pkk[i]*p[j],
j
=
max(seq(index[op(k,
indets(pkk[i]))],
k = 1..nops(indets(pkk[i]))))..n), i =
1..vectdim(pkk))]);
wstarstar := map(eval, subs({seq(y[i] = ystar[i], i = 1..p2)},
evalm(w_hat)));
RHS := evalm(transpose(p) &* (&*(G, C2, grad_W) + X) - transpose(ystar) &*
Y + g1
+ &*(transpose(wstarstar), R1, wstarstar)
+ &*(transpose(x), transpose(C1), C1, x) - Hstar + Phi);
RHS := eval(subs({seq(x[i]=grad_W[i], i=1..n), seq(w[i]=wstarstar[i],
i=1..m1),
seq(u[i] = 0, i = 1..m2)}, RHS));
RHS := mtaylor(RHS, p_list, ord+2) - mtaylor(RHS, p_list, ord+1);
c_VW := vector(vectdim(pkk));
eq_VW := simplify(evalm(&*(transpose(p), (A - G &* C2),
grad(multiply(transpose(c_VW), pkk), p)) + RHS));
eq_VW := {coeffs(collect(eq_VW, p_list, distributed), p_list)};
tmp := {};
for i from 1 to nops(eq_VW) do
if not type(eq_VW[i], constant) then
tmp := {op(tmp), eq_VW[i]};
fi;
od;
eq_VW := tmp;
indets_eq_VW := indets(eq_VW);
to_be_assigned := convert(c_VW, set) minus indets_eq_VW;
assign(fsolve(eq_VW, indets_eq_VW));
assign({seq(to_be_assigned[i] = 0, i = 1 .. nops(to_be_assigned))});
W := W + multiply(transpose(c_VW), pkk);
grad_W := grad(W, p); # of order ord
grad_yY := grad(evalm(transpose(y) &* Y), w);
pXgDCx := evalm(jacob_X &* p + grad_g1 + 2*&*(D11t, C1, x));
RHS := evalm(-0.5*R1i &* (pXgDCx - grad_yY));
RHS := eval(subs({seq(x[i]=grad_W[i], i=1..n), seq(w[i]=w_hat[i],
i=1..m1),
seq(u[i] = 0, i = 1..m2)}, RHS));
w_hat := vector([seq(w_hat[i] + mtaylor(RHS[i], p_list, ord+1)
- mtaylor(RHS[i], p_list, ord), i = 1..m1)]);
jacob_Y := eval(subs({seq(w[i] = w_hat[i], i = 1..m1)}, jacobian(Y, w)));
g2 := eval(subs({seq(w[i] = w_hat[i], i = 1..m1)},
evalm(Y - C2 &* x - 0.5*DRD &* y)));
jacob_w_hat := jacobian(w_hat, y);
g3 := evalm(jacob_Y &* jacob_w_hat - 0.5*DRD);
g4 := evalm(2*&*(transpose(jacob_w_hat), R1, w_hat) - 0.5*DRD &* y);
RHS := evalm(2*DRDi &* (transpose(jacob_w_hat) &* pXgDCx - C2 &* x
- g2 - transpose(g3) &* y + g4));
RHS := eval(subs({seq(x[i]=grad_W[i], i=1..n), seq(w[i]=w_hat[i],
i=1..m1),
seq(u[i] = 0, i = 1..m2)}, RHS));
RHS := map(eval, subs({seq(y[i] = ystar[i], i = 1..p2)}, eval(RHS)));
Hstar := evalm(transpose(grad_V) &* Xstar +
- gamma^2 * transpose(wstar)
lprint(` `);
lprint(` * second HJI *`);
lprint(` `);
# first order approximation:
lprint(` approximation order:`, 1);
print();
B1 := submatrix(B, 1..n, 1..m1);
D11 := submatrix(D1dot, 1..p1, 1..m1);
D21 := map(eval, subs({seq(xv[i] = 0., i =
D21t := transpose(D21);
D11t := transpose(D11);
C2 := map(eval, subs({seq(xv[i] = 0., i = 1
eyem1 := diag(seq(1., i=1..m1));
R1 := evalm(D11t &* D11 - gamma^2 * eyem1);
R1i := inverse(R1);
DRD := evalm(&*(D21, R1i, D21t));
DRDi := inverse(DRD);
hstar := evalm(0.5 * map(eval, subs({seq(x[
phi := evalm(0.5 * map(eval, subs({seq(x[i]
Ae := evalm(A - &*(B1, R1i, (D11t &* C1 + &
(C
R := evalm(4. * (&*(transpose(C2 - &*(D21,
(C2 - &*(D21, R1i, D11t, C1))) -
D11t, C1) + &*(transpose(C1), C1
Q := evalm(0.25 * &*(B1, (-R1i + &
transpose(B1))
ham := stack(augment(transpose(Ae), R), aug
#
res := aresolve(ham, ‘eigen’, 2, eps);
if not(res[2] and definite(res[1], ‘positiv
lprint(` Riccati equation:
pass := false;
else
lprint(` Riccati equation:
P := res[1];
p := vector([seq(p.i, i=1..n)]);
p_list := convert(p, list);
ystar := evalm(-&*(DRDi,4.*(C2 - &*(D21
- &*(D21, R1i, transpose
y := vector([seq(y.i, i=1..p2)]);
w_hat := evalm(-R1i &* (2.*&*(D11t, C1,
G := evalm(&*(inverse(&*() - 4*P &* K),
(&*(transpose(C1), D11, R1i,
W := multiply(transpose(p), P, p);
grad_W := grad(W, p);
fi;
Ae := ‘Ae’; R := ‘R’; Q := ‘Q’; ham := ‘ham
print();
# higher order approximations
# mtaylor: order must be desired or
4 Listings for M
aple V47
4.4 Auxiliary Subroutines
ystar := vector([seq(ystar[i] + mtaylor(RHS[i], p_list, ord+1) - mtaylor(RHS[i], p_list, ord), i = 1..p2)]); print(); od; RHS := ‘RHS’; eq_VW := ‘eq_VW’; tmp := ‘tmp’; indets_eq_VW := ‘indets_eq_VW’; pkk := ‘pkk’;
if pass then Ystar := map(eval, subs({seq(w[i] = wstar[i], i = 1..m1)}, eval(Y))); # calculation of observer gain # order is restricted to apxord lprint(` * calculation of output injection gain *`); print(); grad_V_p := map(eval, subs({seq(x[i] = grad_W[i], i = 1..n)},eval(grad_V))); tmp := evalm(p - grad_V_p); tmp := vector([seq(mtaylor(tmp[i],p_list,apxord+1),i=1..n)]); L := transpose(extract(tmp, p)); R := transpose(extract(ystar, p)); hess_W := hessian(W, p); ustar_p := map(eval, subs({seq(x[i] = grad_W[i], i = 1..n)},eval(ustar))); ustar_p := vector([seq(mtaylor(ustar_p[i],p_list,apxord+1),i=1..m2)]); if balflag then A := evalm(&*(inverse(P), (A-B&*F-G&*C2), P)); B := evalm(0.5*inverse(P)&*G); C := evalm(-2.*F&*P); T := sysbal(A, B, C); p_ := evalm(T &* p); ustar_p := map(eval, subs({seq(p[i] = p_[i], i = 1..n)},eval(ustar_p))); fi; if fileflag then G := matrix(n, p2); Wppi := matrix(n, n); # inverse of hess_W Xstar := map(eval, subs({seq(x[i] = grad_W[i], i = 1..n)},eval(Xstar))); Ystar := map(eval, subs({seq(x[i] = grad_W[i], i = 1..n)},eval(Ystar))); if ordflag then Xstar := vector([seq(mtaylor(Xstar[i], p_list, apxord+1), i =1..n)]); Ystar := vector([seq(mtaylor(Ystar[i], p_list, apxord+1), i =1..p2)]); fi; dp := evalm(Wppi &* (Xstar + G &* (y - Ystar))); if balflag then dp := evalm(inverse(T) &* dp); dp := map(eval, subs({seq(p[i] = p_[i], i = 1..n)}, eval(dp)));
R := map(eval, subs({seq(p[i] = p_[i], i = 1..n)}, eval(R))); L := map(eval, subs({seq(p[i] = p_[i], i = 1..n)}, eval(L))); fi; wrtMEXctrl(dp, R, L, ustar_p, p, y, G, filename, false, hess_W, Wppi); lprint(` ** controller written to `.filename.`.c **`); print(); RETURN(); else G := linsolve(L, R); # controller K := [[evalm(inverse(hess_W) &* (Xstar + G &* (y - Ystar))), ustar_p],[p, y]]; K := [[map(eval, subs({seq(x[i] = grad_W[i], i=1..n)},eval(K[1][1]))), K[1][2]], K[2]]; if ordflag then K := [[vector([seq(mtaylor(K[1][1][i],p_list,apxord+1),i=1..n)]),
vector([seq(mtaylor(K[1][2][i],p_list,apxord+1),i=1..m2)])], K[2]]; fi; if balflag then K := [[evalm(inverse(T) &* K[1][1]), K[1][2]], K[2]]; K := [[map(eval, subs({seq(p[i] = p_[i], i=1..n)},eval(K[1][1]))), K[1][2]], K[2]]; fi; if nargout = 2 then Kzw := [map(eval, subs({seq(y[i] = Y[i], i = 1..p2)},eval(K[1][1]))), map(eval, subs({seq(y[i] = Y[i], i = 1..p2)},eval(K[1][2])))]; Tzw := [[vector([seq(eval(subs({seq(u[i] = Kzw[2][i], i = 1..m2)}, X[j])), j = 1..n), seq(Kzw[1][j], j = 1..n)]), map(eval, subs({seq(u[i] = Kzw[2][i], i = 1..m2)},eval(Z)))], [vector([seq(x[i], i = 1..n), seq(p[i], i = 1..n)]), w]]; fi; fi; else K := []; Tzw := []; fi;
if nargout = 1 then RETURN(eval(K, 2)); else RETURN(eval([K, Tzw], 3)); fi;end:
4.4 Auxiliary Subroutines
4.4.1 aresolve: Solution to the Algebraic Riccati Equation
aresolve := proc() local eps, nargout, method, ham, n, m, k, EVham, i, XX, X, info;
4 Listings for Maple V 48 4.4 Auxiliary Subroutines
olution
t, eps)
ble) of the
ethod used to compute the basis
f the stable subspace of ham
ts (default: 1)
ult: 1e-10)
the Riccati equation
tion, false otherwise (due to
s of ham or an unequal number of
ive eigenvalues).
lhf
`);
> 2 or args[3] <= 0 then
eger <= 2.`);
gen2`) then
eigen2``.`);
uare))) then
numerical values.`);
ts , (x,y) -> evalb(Re(op(1,x)) <
if convert([seq(evalb(Re(op(1,op(i,EVham))) < -eps), i=1..k)], `and`) then
# the first n eigenvalues are in the left half plane
XX := transpose(matrix([seq(op(op(3,op(i,EVham))), i=1..k)]));
X := linsolve(transpose(submatrix(XX, 1..n, 1..n)),
transpose(submatrix(XX, n+1..2*n, 1..n))); # X = X2/X1
X := map(Re, evalm(0.5*X + 0.5*transpose(X)));
info := true;
else
X := `X`;
info := false;
fi;
elif method = `eigen2` then # using evalf(Eigenvals)
EVham := evalf(Eigenvals(ham, ‘vect’));
m := 1; k := 0;
while (m < 2*n) do
if Re(EVham[m]) < -eps then
k := k + 1;
if type(EVham[m], realcons) then
XX[k] := subvector(vect, 1..2*n, m);
else
XX[k] := evalm(subvector(vect, 1..2*n, m)
+ I*subvector(vect, 1..2*n, m+1));
k := k + 1;
XX[k] := evalm(subvector(vect, 1..2*n, m)
- I*subvector(vect, 1..2*n, m+1));
m := m + 1;
fi;
fi;
m := m + 1;
od;
if k = n then
# the first n eigenvalues are in the left half plane
XX := transpose(matrix([seq(XX[k], k=1..n)]));
X := linsolve(transpose(submatrix(XX, 1..n, 1..n)),
transpose(submatrix(XX, n+1..2*n, 1..n))); # X = X2/X1
X := map(Re, evalm(0.5*X + 0.5*transpose(X)));
info := true;
else
X := `X`;
info := false;
fi;
fi;
if nargout = 1 then
RETURN(eval(X));
else
RETURN(eval([X, info], 2));
fi;
end:
`help/text/aresolve` := TEXT(
`FUNCTION: aresolve: numerical solution to the algebraic Riccati equation`,
` `,
`CALLING SEQUENCE:`,
` aresolve(ham, method, nargout, eps)`,
` `,
`PARAMETERS:`,
` ham - Hamiltonian [A R; Q -A’] for the Riccati equation`,
` method - ``eigen`` or ``eigen2`` -- method used to compute the basis`,
# Algebraic Riccati Equation -- numerical s
#
# [X, info] := aresolve(ham, method, nargou
# finds the stabilizing solution (A+R*X sta
# Riccati equation
# A’*X + X*A + X*R*X + Q = 0.
#
# input: ham = [A R; -Q -A’]: Hamiltonian
# method: `eigen` or `eigen2` -- m
# o
# nargout: number of output argumen
# eps: tolerance for zero (defa
# output: X: stabilizing solution to
# info: flag: true if valid solu
# jw-axis eigenvalue
# positive and negat
#
# not optimized for speed! does not use eva
#
# Urs Christen, Feb. 1996, Sept. 1996
if nargs < 4 then
eps := 1.0e-10;
elif not(type(args[4], numeric)) then
ERROR(`’eps’ must be a numerical value.
else
eps := args[4];
fi;
if nargs < 3 then
nargout := 1;
elif not(type(args[3], integer)) or args[3]
ERROR(`’nargout’ must be a positive int
else
nargout := args[3];
fi;
if nargs < 2 then
method := `eigen`;
elif not(args[2] = `eigen` or args[2] = `ei
ERROR(`’method’ must be ``eigen`` or ``
else
method := args[2];
fi;
if nargs < 1 then
ERROR(`no arguments!`);
elif not(type(args[1], ‘matrix’(numeric, sq
ERROR(`’ham’ must be a square matrix of
else
ham := scalarmul(args[1], 1.0);
fi;
n := rowdim(ham)/2;
if method = `eigen` then # using eigenvec
EVham := sort([eigenvects(ham)]
Re(op(1,y))));
m := 0; k := 0;
while (m < n) do
k := k + 1;
m := m + op(2,op(k,EVham));
od;
4 Listings for M
aple V49
4.4 Auxiliary Subroutines
` of the stable subspace of ham; eigen2 is faster but less`,` reliable`,` nargout - number of output arguments (default: 1) -- see Synopsis`,` eps - tolerance for zero (default: 1e-10)`,` `,`SYNOPSIS:`,` - Computes the solution to the algebraic Riccati equation`,` A’*X + X*A + X*R*X - Q = 0.`,` `,` - If nargout := 2, the output of aresolve is a list containing`,
` [X, info] where X is the solution and info is a flag set to`,` true if the solution is valid, to false otherwise.`,` `,` - If nargout := 1 (default), only X is returned.`,` `,` - If no valid solution can be found, an unevaluated X is returned.`,` Invalid solutions may be due to jw-axis eigenvalues of ham or an`,` unequal number of positive and negative eigenvalues.`):
4.4.2 lyapsolve: Solution to Lyapunov Equationlyapsolve := proc() local A, Q, n, EWEV_A, EW_A, EV_A, EV_Ai, i, j, X; # Lyapunov Equation -- numerical solution # # X := lyapsolve(A, Q) # finds the solution X of the Lyapunov equation # A*X + X*A’ + Q = 0 # if A has eigenvalues smaller than zero. # # not optimized for speed! does not use evalhf # # Urs Christen, Feb. 1997 if nargs < 2 then ERROR(`not enough arguments!`); elif not(type(args[1], ‘matrix’(numeric, square))) then ERROR(`’A’ must be a square matrix of numerical values.`); elif not(type(args[2], ‘matrix’(numeric, square))) then ERROR(`’Q’ must be a square matrix of numerical values.`); elif not(rowdim(args[2]) = rowdim(args[1])) then
ERROR(`dimensions not compatible.`); else A := scalarmul(args[1], 1.0); Q := scalarmul(args[2], 1.0); fi; n := rowdim(A); EWEV_A := [eigenvects(A)]; EW_A := vector([seq(seq(op(1, op(i,EWEV_A)), j=1..op(2, op(i,EWEV_A))), i=1..nops(EWEV_A))]); EV_A := transpose(matrix([seq(op(op(3,op(i,EWEV_A))), i=1..nops(EWEV_A))])); EV_Ai := inverse(EV_A); X := evalm(&*(EV_Ai, Q, transpose(EV_Ai))); X := matrix([seq([seq(X[i,j]/(EW_A[i]+EW_A[j]), j=1..n)], i=1..n)]); X := evalm(&*(-EV_A, X, transpose(EV_A))); X := map(Re, evalm(0.5*X + 0.5*transpose(X)));
RETURN(eval(X));end:
4.4.3 sysbal: Balancing a Linear Systemsysbal := proc() local A, B, C, Wc, Wo, sig, T, U; # Transformation matrix for balancing a linear system # # T := sysbal(A, B, C) # computes the balancing transformation matrix for the system # (A, B, C). The balanced system is given by (T\A*T, T\B, C*T). # The system must be minimal and asymptotically stable. # # Urs Christen, Feb. 1997 if nargs < 3 then ERROR(`not enough arguments!`); elif not(type(args[1], ‘matrix’(numeric, square))) then ERROR(`’A’ must be a square matrix of numerical values.`); elif not(type(args[2], ‘matrix’(numeric))) then ERROR(`’B’ must be a matrix of numerical values.`); elif not(type(args[3], ‘matrix’(numeric))) then ERROR(`’C’ must be a matrix of numerical values.`); elif not(rowdim(args[1]) = rowdim(args[2]) and coldim(args[1]) = coldim(args[3])) then
ERROR(`dimensions not compatible.`);
else
A := scalarmul(args[1], 1.0);
B := scalarmul(args[2], 1.0);
C := scalarmul(args[3], 1.0);
fi;
Wc := lyapsolve(A, evalm(B &* transpose(B)));
Wo := lyapsolve(transpose(A), evalm(transpose(C) &* C));
sig := diag(op(convert(map(sqrt, evalf(Svd(Wc, U, `left`))), list)));
T := evalm(U &* sig);
Wo := evalm(&*(transpose(T), Wo, T));
sig := diag(op(convert(map((x) -> x^(-0.25), evalf(Svd(Wo, U, `left`))),list)));
T := evalm(&*(T, U, sig));
RETURN(eval(T));
end:
4 Listings for M
aple V50
4.5 Generation of C
ode for SIM
UL
INK
4.5 Generation of Code for SIMULINK
There are two different subroutines for the generation of SIMULINK
mex files in C code. The first one, wrtMEXfile, can be used for anysmooth, dynamical system. The second one, wrtMEXctrl, generatescode for a controller for which the observer gain matrix must be
computed on line. It contains code for solving a system of linear equa-tions (Gauß algorithm, code based on [8]).
Both of these subroutines make use of the mex-file template sfunt-mpl.c shipped with SIMULINK 1.3.
4.5.1 wrtMEXfilewrtMEXfile := proc()
local var, G, X, Y, dx, y, x, xx, u, uu, n, m, p, i,line, replaceset, tmplname, mexfile, name, Xo, Yo, localsX, localsY, tmp;
# writing a mex-file for use in SIMULINK## wrtMEXfile(G, var, system_name)# writes a mex-file in C for the simulation of the # dynamical system given by# x_dot = X(x,u)# y = Y(x,u).## input: G := [[X(x,u)], [Y(x,u)]]: dynamical system # var := [[x], [u]]: variables in G
# system_name: name of the system and file to be produced# (without extension)## Urs Christen, August 1996
if nargs < 3 thenERROR(`not enough arguments!`);
elif not(type(args[3], string)) thenERROR(`’system name’ must be a string.`);
elif not(nops(args[2]) = 2) thenERROR(`’var’ must consist of the two parts [x, u].`);
elif convert([seq(not(type(op(i, args[2]), vector)), i = 1..2)], `or`) thenERROR(`’var’ must consist of two vectors.`);
elif not(nops(args[1]) = 2) thenERROR(`’G’ must consist of [X(x,u), Y(x,u)].`);
elif convert([seq(not(type(op(i, args[1]), vector)), i = 1..2)], `or`) thenERROR(`’G’ must consist of two vectors.`);
elsevar := args[2];G := args[1];
fi;
name := args[3];xx := op(1, var);uu := op(2, var);X := op(1, G);Y := op(2, G);
n := vectdim(xx);m := vectdim(uu);p := vectdim(Y);
readlib(C);readlib(optimize);
# for releases R2 and R3 only readlib(write); interface(screenwidth=200);
replaceset := {seq(uu[i] = u[i-1], i = 1..m), seq(xx[i] = x[i-1], i = 1..n)};X := map(eval, subs(replaceset, evalm(X)));Y := map(eval, subs(replaceset, evalm(Y)));if n > 0 then
dx := array(0..n-1);for i from 1 to n do
dx[i-1] := X[i];od;Xo := [optimize(dx)];localsX := [op(2, `optimize/makeproc`(Xo))];
fi;y := array(0..p-1);for i from 1 to p do
y[i-1] := Y[i];od;Yo := [optimize(y)];localsY := [op(2, `optimize/makeproc`(Yo))];
lprint(` Writing mex-file for SIMULINK`);lprint(` =============================`);print();
tmplname := `sfuntmpl.c`;mexfile := ``.name.`.c`;traperror(fremove(mexfile));
open(mexfile); line := readline(tmplname);
writeln(line);writeln(` * `.name.` C-code for an s-function for use in Simulink`);writeln(` * `);writeln(` * generated by wrtMEXfile in Maple`);
close(); system(`date >>`.mexfile); appendto(mexfile);
writeln(` * wrtMEXfile by U. Christen, August 1996`);for i from 2 to 5 do
line := readline(tmplname);od;for i from 6 to 13 do
G x( )
4 Listings for Maple V 51 4.5 Generation of Code for SIMULINK
`); /* number of continuous
/* number of discrete states */
); /* number of inputs */`);
); /* number of outputs */`);
1)}) then
/* direct feedthrough flag */
/* direct feedthrough flag */
5, s6, s7, s8, s9, s10; /* often
close();
C(Yo, filename = mexfile);
appendto(mexfile);
for i from 89 to 91 do
line := readline(tmplname);
od;
for i from 92 to 118 do
line := readline(tmplname);
writeln(line);
od;
# derivative’s function
if n > 0 then
for i from 1 to nops(localsX) do
tmp := op(i, localsX);
writeln(` static double `.tmp.`;`);
od;
writeln(` static double s1, s2, s3, s4, s5, s6, s7, s8, s9, s10; /* often
used */`);
writeline(mexfile);
close();
C(Xo, filename = mexfile);
appendto(mexfile);
fi;
for i from 119 to 122 do
line := readline(tmplname);
od;
while line <> 0 do
writeln(line);
line := readline(tmplname);
od;
writeto(terminal);
close();
end:
`help/text/wrtMEXfile` := TEXT(
`FUNCTION: wrtMEXfile: produces a mex-file for use in SIMULINK`,
``,
`CALLING SEQUENCE:`,
`wrtMEXfile(G, var, system_name)`,
``,
`PARAMETERS:`,
`G - dynamical system [[X(x,u)], [Y(x,u)]] where`,
` x_dot = X(x,u)`,
` y = Y(x,u)`,
` X and Y must be of type vector`,
`var - names of the variables used in G: var := [[x], [u]]`,
` where x and u must be of type vector`,
`system_name - name of the system and file to be produced`,
` (without extension)`,
``,
`SYNOPSIS:`,
`- writes a mex-file for use in SIMULINK`,
``,
`- For static systems, define X and x as vector([]).`,
``,
`- Path not handled yet; no initial conditions.`,
``
line := readline(tmplname);
writeln(line);
od;
writeln(`#define S_FUNCTION_NAME `.name);
writeline(mexfile);
writeln(`#include <math.h>`);
line := readline(tmplname);
for i from 15 to 31 do
line := readline(tmplname);
writeln(line);
od;
writeln(` ssSetNumContStates( S, `.n.
states */`);
writeln(` ssSetNumDiscStates( S, 0);
`); writeln(` ssSetNumInputs( S, `.m.`
writeln(` ssSetNumOutputs( S, `.p.`
if has(indets(Yo), {seq(u[i], i=0 .. m-
writeln(` ssSetDirectFeedThrough(S, 1);
`);
else
writeln(` ssSetDirectFeedThrough(S, 0);
`);
fi;
for i from 32 to 36 do
line := readline(tmplname);
od;
for i from 37 to 57 do
line := readline(tmplname);
writeln(line);
od;
for i from 58 to 61 do
line := readline(tmplname):
od;
for i from 62 to 74 do
line := readline(tmplname):
writeln(line):
od;
if n > 0 then
writeln(` int i;`);
writeln(` `);
writeln(` for(i = 0; i < `.n.`; i++)`);
writeln(` x0[i] = 0.;`);
fi;
for i from 75 to 77 do
line := readline(tmplname);
od;
for i from 78 to 88 do
line := readline(tmplname);
writeln(line);
od;
# output function
for i from 1 to nops(localsY) do
tmp := op(i, localsY);
writeln(` static double `.tmp.`;`);
od;
writeln(` static double s1, s2, s3, s4, s
used */`);
writeline(mexfile);
4 Listings for Maple V 52 4.5 Generation of Code for SIMULINK
n, m, p, i, j, line, replaceset,
e, name, Xo, Yo, Ro, Lo, localsX,
, tmp, AWBTflag, np, G, u, x,
Wpp, Wppi, Wppo;
later u
, later y
), seq(xx[i] = x[i-1], i = 1..n)};
-1], j = 1..p), i = 1..n)};
q(seq(hess_Wi[i, j] = Wppi[i-1, j-
1..n), i = 1..n)});
; ; ; );
od;
Xo := [optimize(dx)];
localsX := {op(2, `optimize/makeproc`(Xo))};
L := array(0..n-1, 0..n-1);
for i from 1 to n do
for j from 1 to n do
L[i-1, j-1] := LL[i, j];
od;
od;
Lo := [optimize(L)];
localsL := {op(2, `optimize/makeproc`(Lo))};
R := array(0..p-1, 0..n-1); # transpose of R (more efficient in C)
for i from 1 to n do
for j from 1 to p do
R[j-1, i-1] := RR[i, j];
od;
od;
Ro := [optimize(R)];
localsR := {op(2, `optimize/makeproc`(Ro))};
if Wppflag then
hess_W := map(eval, subs(replaceset, evalm(hess_W)));
Wpp := array(0..n-1, 0..n-1);
for i from 1 to n do
for j from 1 to n do
Wpp[i-1, j-1] := hess_W[i, j];
od;
od;
Wppo := [optimize(Wpp)];
localsWpp := {op(2, `optimize/makeproc`(Wppo))};
else
localsWpp := {};
fi;
localsXRLW := `union`(localsX, localsR, localsL, localsWpp);
y := array(0..m-1);
for i from 1 to m do
y[i-1] := uu[i];
od;
Yo := [optimize(y)];
localsY := [op(2, `optimize/makeproc`(Yo))];
tmplname := `sfuntmpl.c`;
invfile := `linsolv.c`; # file containing code for matrix inversion
mexfile := ``.name.`.c`;
traperror(fremove(mexfile));
open(mexfile);
line := readline(tmplname);
writeln(line);
writeln(` * `.name.` C-code for an s-function for use in Simulink`);
writeln(` * `);
): 4.5.
2 wrtMEXctrl
wrtMEXctrl := proc()
local GG, RR, R, LL, L, X, dx, y, yy, xx, uu,
replaceset2, tmplname, invfile, mexfil
localsL, localsR, localsXRLW, localsY
Wppflag, localsWpp, hess_W, hess_Wi,
# Urs Christen, Feb 1997
if nargs < 10 then
Wppflag := false;
else
Wppflag := true;
hess_W := args[10];
hess_Wi := args[11];
fi;
if nargs < 9 then
AWBTflag := false;
else
AWBTflag := args[9];
fi;
name := args[8];
GG := args[7];
yy := args[6]; # inputs to controller,
xx := args[5];
uu := args[4]; # outputs of controller
L := args[3];
R := args[2];
X := args[1];
n := vectdim(xx);
m := vectdim(uu);
p := vectdim(yy);
readlib(C);
readlib(optimize);
# for releases R2 and R3 only
readlib(write);
interface(screenwidth=200);
replaceset := {seq(yy[i] = u[i-1], i = 1..p
replaceset2 := {seq(seq(GG[i, j] = G[i-1, j
if Wppflag then
replaceset2 := `union`(replaceset2, {se
1],
j =
fi;
X := map(eval, subs(replaceset, evalm(X)));
X := map(eval, subs(replaceset2, evalm(X)))
RR := map(eval, subs(replaceset, evalm(R)))
LL := map(eval, subs(replaceset, evalm(L)))
uu := map(eval, subs(replaceset, evalm(uu))
dx := array(0..n-1);
for i from 1 to n do
dx[i-1] := X[i];
4 Listings for Maple V 53 4.5 Generation of Code for SIMULINK
e`);
hristen, Feb 1997 */`, ` `);
mension n */`);
.`); /* number of continuous
/* number of discrete states
.p.`); /* number of inputs */
`.np.`); /* number of inputs
); /* number of outputs */`);
/* direct feedthrough flag */
writeln(line):
od;
if n > 0 then
writeln(` int i;`);
writeln(` `);
writeln(` for(i = 0; i < `.n.`; i++)`);
writeln(` x0[i] = 0.;`);
fi;
for i from 75 to 77 do
line := readline(tmplname);
od;
for i from 78 to 88 do
line := readline(tmplname);
writeln(line);
od;
# output function
for i from 1 to nops(localsY) do
tmp := op(i, localsY);
writeln(` static double `.tmp.`;`);
od;
writeln(` static double s1, s2, s3, s4, s5, s6, s7, s8, s9, s10; /* often
used */`);
writeln();
close();
C(Yo, filename = mexfile);
appendto(mexfile);
for i from 89 to 91 do
line := readline(tmplname);
od;
for i from 92 to 118 do
line := readline(tmplname);
writeln(line);
od;
# derivative’s function
writeln(` static int i, j, err, signdet, perm[`.n.`];`);
writeln(` static double sol[`.n.`];`);
writeln(` static double G[`.n.`][`.p.`];`);
writeln(` static double R[`.p.`][`.n.`]; /* transpose of R for
efficiency in C */`);
writeln(` static double L[`.n.`][`.n.`];`);
if Wppflag then
writeln(` static double Wpp[`.n.`][`.n.`]; /* Hessian of W(p) */`);
writeln(` static double Wppi[`.n.`][`.n.`]; /* Inverse of Wpp */`);
writeln(` static double eye[`.n.`]; /* Identity for inversion */`);
fi;
for i from 1 to nops(localsXRLW) do
tmp := op(i, localsXRLW);
writeln(` static double `.tmp.`;`);
od;
writeln(` static double s1, s2, s3, s4, s5, s6, s7, s8, s9, s10; /* often
used */`);
writeln();
close();
C(Ro, filename = mexfile);
C(Lo, filename = mexfile);
if Wppflag then
C(Wppo, filename = mexfile);
fi;
writeln(` * generated by wrtMEXctrl in Mapl
close();
system(`date >>`.mexfile);
appendto(mexfile);
writeln(` * wrtMEXctrl by U. C
for i from 1 to 10 do
line := readline(invfile);
writeln(line);
od;
writeln(`#define dim_n `.n.` /* Di
line := readline(invfile);
line := readline(invfile);
while line <> 0 do
writeln(line);
line := readline(invfile);
od;
for i from 2 to 6 do
line := readline(tmplname);
od;
for i from 7 to 13 do
line := readline(tmplname);
writeln(line);
od;
writeln(`#define S_FUNCTION_NAME `.name);
writeln();
writeln(`#include <math.h>`);
line := readline(tmplname);
for i from 15 to 31 do
line := readline(tmplname);
writeln(line);
od;
writeln(` ssSetNumContStates( S, `.n
states */`);
writeln(` ssSetNumDiscStates( S, 0);
*/`);
if not AWBTflag then
writeln(` ssSetNumInputs( S, `
`);
else
np := n+p;
writeln(` ssSetNumInputs( S,
*/`);
fi;
writeln(` ssSetNumOutputs( S, `.m.`
writeln(` ssSetDirectFeedThrough(S, 0);
`);
for i from 32 to 36 do
line := readline(tmplname);
od;
for i from 37 to 57 do
line := readline(tmplname);
writeln(line);
od;
for i from 58 to 61 do
line := readline(tmplname):
od;
for i from 62 to 74 do
line := readline(tmplname):
4 Listings for Maple V 54 4.5 Generation of Code for SIMULINK
rm, R[0], sol, &signdet);`);
this file being compiled as a MEX-
i”, err); */`);
; , perm, R[i], sol, &signdet);`);
* Is this file being compiled as a
er %i”, err); */`);
)`);
)`);
Wpp, perm, eye, sol, &signdet);`);
* Is this file being compiled as a
er %i”, err); */`);
)`);
; {`);
1;`);
writeln(` err = gauss(2, `.n.`, Wpp, Wpp, perm, eye, sol,
&signdet);`);
writeln(`# ifdef MATLAB_MEX_FILE /* Is this file being compiled
as a MEX-file? */`);
writeln(`/* if (err) mexPrintf(“Fehler %i”, err); */`);
writeln(`# endif`);
writeln(` for (j = 0; j < `.n.`; j++)`);
writeln(` Wppi[j][i] = sol[j];`);
writeln(` }`);
fi;
writeln(` `);
close();
C(Xo, filename = mexfile);
appendto(mexfile);
if AWBTflag then
writeln(` `);
writeln(` /* AWBT ---------------- */`);
writeln(` for (i = 0; i < `.n.`; i++)`);
writeln(` dx[i] += u[`.p.`+i];`);
fi;
writeln(` `);
for i from 119 to 122 do
line := readline(tmplname);
od;
while line <> 0 do
writeln(line);
line := readline(tmplname);
od;
close();
end:
********************** */
-----------------------*/
ng zur numerischen
es Institut,
*/
Dimension n */
Maschinengenauigkeit */
IBM-AT: = 2 hoch -52 */
aschine darstellbare
1.0 */
*/
/* Maximum von X,Y */
double b[dim_n],
double x[dim_n],
int *signdet
)
/*====================================================================*/
/* */
/* Die Funktion gauss dient zur Loesung eines linearen Gleichungs- */
/* systems: matrix * x = b. */
/* Dabei sind: matrix die regalaere n x n Koeffizientenmatrix, */
/* b die rechte Seite des Systems (n-Vektor), */
/* x der Loesungsvektor des Gleichungssystems. */
/* */
/* gauss arbeitet nach dem Gauss-Algarithmus mit Dreieckzerlegung */
/* und skalierter Spaltenpivotsuche (Crout-Verfahren mit Zeilen- */
/* vertauschung). */
/* */
/*====================================================================*/
/* */
/* Anwendung: */
/* ========= */
/* Beliebige lineare Gleichungssysteme mit regulaerer n x n */
/* Koeffizientenmatrix. */
/* */
/*====================================================================*/
appendto(mexfile);
writeln(` `);
writeln(` err = gauss(0, `.n.`, L, L, pe
writeln(`# ifdef MATLAB_MEX_FILE /* Is
file? */`);
writeln(`/* if (err) mexPrintf(“Fehler %
writeln(`# endif`);
writeln(` for (j = 0; j < `.n.`; j++)`);
writeln(` G[j][0] = sol[j];`);
writeln(` for(i = 1; i < `.p.`; i++) {`)
writeln(` err = gauss(2, `.n.`, L, L
writeln(`# ifdef MATLAB_MEX_FILE /
MEX-file? */`);
writeln(`/* if (err) mexPrintf(“Fehl
writeln(`# endif`);
writeln(` for (j = 0; j < `.n.`; j++
writeln(` G[j][i] = sol[j];`);
writeln(` }`);
if Wppflag then
writeln(` `);
writeln(` eye[0] = 1;`);
writeln(` for (j = 1; j < `.n.`; j++
writeln(` eye[j] = 0;`);
writeln(` err = gauss(0, `.n.`, Wpp,
writeln(`# ifdef MATLAB_MEX_FILE /
MEX-file? */`);
writeln(`/* if (err) mexPrintf(“Fehl
writeln(`# endif`);
writeln(` for (j = 0; j < `.n.`; j++
writeln(` Wppi[j][0] = sol[j];`)
writeln(` for(i = 1; i < `.n.`; i++)
writeln(` eye[i-1] = 0; eye[i] =
4.5.
3 linsolve.c
/* ********************************************
/*------------------------- MODUL GAUSS -------
/* based on:
G. Engeln-Muellges, F. Reutter: Formelsammlu
Mathematik mit C-Programmen. Bibliographisch
Mannheim, 1987, pp.314 - 322.
#include <stdio.h>
#define dim_n 7 /*
#define MACH_EPS 2.220446049250313e-016 /*
/*
/* MACH_EPS ist die kleinste positive auf der M
Zahl x, die der Bedingung genuegt: 1.0 + x >
/* Definition von Funktionsmakros:
#define max(X, Y) ((X) > (Y) ? (X) : (Y))
int gauss( int cas,
int n,
double matrix[dim_n][dim_n],
double lumat[dim_n][dim_n],
int perm[dim_n],
4 Listings for Maple V 55 4.5 Generation of Code for SIMULINK
*/
*/
*/
*/
*/
Berechnung */
*/
lumat. */
*/
zuvor muss je- */
sein. Diese */
gleicher */
es Systems vari- */
rsen. */
*/
*/
*/
*/
*/
s, des Loe- */
tors perm. */
*/
wird als Vektor */
*/
2) */
rlegung von */
iecksmatrix ent- */
*/
ehlt werden; dann */
matrix verloren. */
2) */
ertauschungen */
*/
0, 2) */
*/
2) */
rix; die De- */
er Diagonal- */
n. */
*/
*/
*/
0, 1) */
rlegung von */
iecksmatrix ent- */
*/
0, 1) */
ertauschungen */
*/
0, 2) */
*/
0, 1) */
rix; die De- */
er Diaganal- */
n. */
*/
*/
*/
*/
ngabeparameter */
/* = 2 zu wenig Speicherplatz */
/* = 3 Matrix ist singulaer */
/* = 4 Matrix rechnerisch singulaer */
/* = 5 Falsche Aufrufart */
/* */
/*====================================================================*/
/* */
/* Benutzte Funktionen: */
/* =================== */
/* */
/* int gaudec(): Bestimmt die LU-Dekomposition */
/* int gausol(): Loest das lineare Gleichungssystem */
/* */
/*====================================================================*/
{ int res;
int gaudec(),
gausol();
if ( n < 2 ) return(1);
switch (cas)
{
case 0 : { res = gaudec(n, matrix, lumat, perm, signdet);
if ( res == 0 )
return (gausol(n, lumat, perm, b, x));
else return(res);
}
case 1 : return (gaudec(n, matrix, lumat, perm, signdet));
case 2 : return (gausol(n, lumat, perm, b, x));
}
return(5); /* Falsche Aufrufart */
} int gaudec(int n, double matrix[dim_n][dim_n], double lumat[dim_n][dim_n],
int perm[dim_n], int *signdet)
/*====================================================================*/
/* */
/* gaudec berechnet die Zerlegung einer n x n Matrix in eine */
/* untere und eine obere Dreiecksmatrix. Diese Zerlegung wird zur */
/* Loesung eines linearen Gleichungssystems benoetigt. Die Zerlegung */
/* befindet sich nach Aufruf von gaudec in der n x n Matrix lumat. */
/* */
/*====================================================================*/
/* */
/* Eingabeparameter: */
/* ================ */
/* n int n; ( n > 1 ) */
/* Dimension von matrix und lumat, */
/* Anzahl der Komponenten des b-Vektors, des Loe- */
/* sungsvektors x, des Permutationsvektors perm. */
/* matrix double matrix[n][n]; */
/* Matrix des Gleichungssystems. Diese wird als Vektor */
/* von Zeigern uebergeben. */
/*
/* Steuerparameter:
/* ===============
/* cas int cas;
/* Aufrufart von gauss:
/* = 0 Bestimmung der Zerlegungsmatrix und
/* der Loesung des Gleichungssystems.
/* = 1 Nur Berechnung der Zerlegungsmatrix
/*
/* = 2 Nur Loesung des Gleichungssystems;
/* doch die Zerlegungsmatrix bestimmt
/* Aufrufart wird verwendet, falls bei
/* Matrix lediglich die rechte Seite d
/* iert, z. B. zur Berechnung der Inve
/*
/* Eingabeparameter:
/* ================
/* n int n: ( n > 1 )
/* Dimension von matrix und lumat,
/* Anzahl der Komponenten des b-Vektor
/* sungsvektors x, des Permutationsvek
/* matrix double matrix[n][n];
/* Matrix des Gleichungssystems. Diese
/* von Zeigern uebergeben.
/* lumat double lumat[n][n]; (bei cas =
/* LU-Dekompositionsmatrix, die die Ze
/* matrix in eine untere und obere Dre
/* haelt.
/* matrix u. lumat koennen gleich gewa
/* geht der urspruengliche Inhalt von
/* perm int perm[n]; (bei cas =
/* Permutationsvektor, der die Zeilenv
/* von lumat enthaelt.
/* b double b[n]; (bei cas =
/* Rechte Seite des Gleichungssystems.
/* signdet int *signdet; (bei cas =
/* Vorzeichen der Determinante von mat
/* terminante kann durch das Produkt d
/* elemente mal signdet bestimmt werde
/*
/* Ausgabeparameter:
/* =================
/* lumat double lumat[n][n]; (bei cas =
/* LU-Dekompositionsmatrix, die die Ze
/* matrix in eine untere und obere Dre
/* haelt.
/* perm int perm[n]; (bei cas =
/* Permutationsvektor, der die Zeilenv
/* von lumat enthaelt.
/* x double x[n]; (bei cas =
/* Loesungsvektor des Systems.
/* signdet int *signdet; (bei cas =
/* Vorzeichen der Determinante von mat
/* terminante kann durch das Produkt d
/* elemente mal signdet bestimmt werde
/*
/* Rueckgabewert:
/* =============
/* = 0 alles ok
/* = 1 n < 2 gewaehlt oder unzulaessige Ei
4 Listings for Maple V 56 4.5 Generation of Code for SIMULINK
*/
*/
*/
*/
rlegung von */
iecksmatrix ent- */
*/
*/
ertauschungen */
*/
*/
rix; die De- */
er Diaganal- */
n. */
*/
*/
*/
*/
ngabeparameter */
*/
*/
*/
*/
=======================*/
*/
*/
*/
*/
*/
*/
=======================*/
*/
*/
*/
*/
*/
=======================*/
Unzulaessige Parameter */
d = Skalierungsvektor */
fuer Pivotsuche */
s lumat u. matrix ver- */
eden gewaehlt sind, */
ere matrix auf lumat. */
Initialisiere perm */
; Zeilenmax. bestimmen */
matrix singulaer */
*signdet = 1; /* Vorzeichen der Determ. */
for (k = 0; k < n-1; k++) { /* Schleife ueber alle Zeilen */
/* bis n-2 */
piv = fabs( lumat[k][k] ) / d[k];
j0 = k; /* Suche aktuelles Pivotelem. */
for (j = k+1; j < n; j++) {
temp = fabs( lumat[j][k] ) / d[j];
if ( piv < temp ) {
piv = temp; /* Merke Pivotelement u. */
j0 = j; /* dessen Index */
}
}
if ( piv < MACH_EPS ) { /* Wenn piv zu klein, so ist */
*signdet = 0; /* matrix nahezu singulaer */
return(4);
}
if ( j0 != k ) {
*signdet = - *signdet; /* Vorzeichen Determinante *(-1) */
m = perm[j0]; /* Tausche Eintraege im Pivot- */
perm[j0] = perm[k]; /* vektor */
perm[k] = m;
temp = d[j0]; /* Tausche Eintraege im */
d[j0] = d[k]; /* Skalierungsvektor */
d[k] = temp;
for (j = 0; j < n; j++) {/* Tausche j0-te und k-te Zeile */
temp = lumat[j0][j];
lumat[j0][j] = lumat[k][j];
lumat[k][j] = temp;
}
}
for (j = k+1; j < n; j++) /* Gauss Eliminationsschritt */
if ( lumat[j][k] != 0.0 ) {
lumat[j][k] /= lumat[k][k];
for (temp = lumat[j][k], m = k+1; m < n; m++)
lumat[j][m] -= temp * lumat[k][m];
}
} /* end k */
if ( fabs(lumat[n-1][n-1]) < MACH_EPS ) {
*signdet = 0;
return(4);
}
return(0);
} int gausol(int n, double lumat[dim_n][dim_n], int perm[dim_n],
double b[dim_n], double x[dim_n])
/*====================================================================*/
/* */
/* gausol bestimmt die Loesung x des linearen Gleichungssystems */
/* lumat * x = b mit der n x n Koeffizientenmatrix lumat, wobei */
/*
/* Ausgabeparameter:
/* ================
/* lumat double lumat[n][n];
/* LU-Dekompositionsmatrix, die die Ze
/* matrix in eine untere und obere Dre
/* haelt.
/* perm int perm[n];
/* Permutationsvektor, der die Zeilenv
/* von lumat enthaelt.
/* signdet int *signdet;
/* Vorzeichen der Determinante von mat
/* terminante kann durch das Produkt d
/* elemente mal signdet bestimmt werde
/*
/* Rueckgabewert:
/* =============
/* = 0 alles ok
/* = 1 n < 2 gewaehlt oder unzulaessige Ei
/* = 2 zu wenig Speicherplatz
/* = 3 Matrix ist singulaer
/* = 4 Matrix rechnerisch singulaer
/*
/*=============================================
/*
/* Benutzte Funktionen:
/* ===================
/*
/* Aus der C Bibliothek: fabs()
/*
/*=============================================
/*
/* Benutzte Konstanten: NULL, MACH_EPS
/*
/* Makros: max
/*
/*=============================================
{ int j0;
register k, j, m;
double piv, temp, d[dim_n], zmax;
double fabs();
if ( &n == NULL || n < 2 ) return(1); /*
/*
/*
if ( lumat != matrix ) /* Fall
for (k = 0; k < n; k++) /* schi
for (j = 0; j < n; j++) /* kopi
lumat[k][j] = matrix[k][j];
for (k = 0; k < n; k++) {
perm[k] = k; /*
for (zmax = 0.0, j = 0; j < n; j++)
zmax = max(zmax, fabs(lumat[k][j]))
/*
if ( zmax == 0.0 ) return(3); /*
d[k] = zmax;
}
4 Listings for Maple V 57 4.5 Generation of Code for SIMULINK
orliegt, wie */
*/
*/
=======================*/
*/
*/
*/
*/
*/
ktors, des Loe- */
svektors perm. */
*/
n gaudec */
*/
*/
ertauschungen */
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
ngabeparameter */
*/
/*====================================================================*/
/* */
/* Benutzte Konstanten: NULL */
/* */
/*====================================================================*/
{ register j, k;
double sum;
if ( &n == NULL || n < 2 ) return(1); /* Unzulaessige Parameter */
if ( b == NULL || perm == NULL ) return(1);
x[0] = b[perm[0]]; /* Vorwaertselimination */
for (k = 1; k < n; k++)
for (x[k] = b[perm[k]], j=0; j < k; j++)
x[k] -= lumat[k][j] * x[j];
x[n-1] /= lumat[n-1][n-1]; /* Rueckwaertselimination */
for (k = n-2; k >= 0; k--) {
for (sum = 0.0, j = k+1; j < n; j++)
sum += lumat[k][j] * x[j];
x[k] = (x[k] - sum) / lumat[k][k];
}
return(0);
} /*------------------------- ENDE GAUSS -------------------------------*/
/* ****************************************************************** */
/* lumat in zerlegter Form (LU-Dekomposition) v
/* sie von gaudec als Ausgabe geliefert wird.
/*
/*=============================================
/*
/* Eingabeparameter:
/* ================
/* n int n; ( n > 1 )
/* Dimension von lumat,
/* Anzahl der Komponenten des b-Ve
/* sungsvektors x, des Permutation
/* lumat double lumat[n][n];
/* LU-Dekompositionsmatrix, wie sie vo
/* geliefert wird.
/* perm int perm[n];
/* Permutationsvektor, der die Zeilenv
/* von lumat enthaelt.
/* b double b[n];
/* Rechte Seite des Gleichungssystems.
/*
/* Ausgabeparameter:
/* ================
/* x double x[n];
/* Loesungsvektor des Systems
/*
/* Rueckgabewert:
/* =============
/* = 0 alles ok
/* = 1 n < 2 gewaehlt oder unzulaessige Ei
/*
5 Example 58 5.1 State Feedback Controller
5 Example
5.1 State Feedback Controller
The only L2 gain problem with a numerical solution we have found in literature is used as an exam-ple to test the program. It is the Nonlinear Benchmark Problem proposed by Bupp et al. [5] for whichin [16] an H∞ state-feedback controller is reported. A cart of mass M, constrained to move along ahorizontal line and fixed to a wall by a spring of stiffness k, is stabilized by a rotational proof massactuator (Fig. 5.1.1). The proof mass has mass m and moment of inertia I about its center of masswhich is located a distance e from the axis of rotation. Our control signal is the torque N, and F is anexternal disturbance force acting on the cart.
After normalization, the equations of motion are given by
(5.1.1)
[5], where ξ is the nondimensional translational position, w and u denote the scaled disturbance andtorque, respectively, and ε describes the coupling between the translational and the rotationalmotions:
.
Equation (5.1.1) written in the form required for the Maple program of the previous section reads
. (5.1.2)
Figure 5.1.1: Translational oscillator with rotational actuator.
M
mΘ
N
k
F
ξ ξ+ ε Θ2 Θsin Θ Θcos–( ) w+=
Θ εξ Θcos– u+=
ε me
I me2+( ) M m+( )-------------------------------------------------=
ξ
ξ
Θ
Θ
ξ
ξ– εΘ2 Θsin uε Θcos– w+ +1 ε2 Θcos2–
------------------------------------------------------------------------
Θ
ε Θcos ξ εΘ2 Θsin–( ) u wε Θcos–+1 ε2 Θcos2–
-----------------------------------------------------------------------------------------
=
5 Example 59 5.1 State Feedback Controller
As in [16], the following performance criterion is considered:
. (5.1.3)
With the parameter ε = 0.5 and the bound γ = 3 for the L2 gain, the Maple commands for calculatingapproximations of the optimal u and w read as follows:
As mentioned in [16], V(i) is zero for uneven i whence and are zero for even i. The termsof order 1 and 3 for and are exactly the same as those reported in [16] (top: , bottom: ):
z
0.1ξ
0.1ξ
0.1Θ
0.1Θu
=
> restart;with(linalg):read `aresolve`:read `hinfSF`;
> epsilon := 1/2;x := vector(4);X := vector([x[2], (-x[1]+epsilon*x[4]^2*sin(x[3]) - (epsilon*cos(x[3])*u) + w) /(1-epsilon^2*cos(x[3])^2), x[4], (epsilon*cos(x[3])*(x[1]-epsilon*x[4]^2*sin(x[3])) + u - (epsilon*cos(x[3])*w)) / (1-epsilon^2*cos(x[3])^2)]);Z := vector([seq(sqrt(0.1)*x[i], i = 1..4), u]);G := [X, Z];var := [x, vector([w]), vector([u])];
> printlevel:=1;Gamma := 3;apxord := 5;result := hinfSF(G, var, apxord, Gamma,3);
u*i( ) w*
i( )
u* w* u* w*
.3568446558*x[1]+.40950277e-1*x[2]-.3184819705*x[3]-.9275011220*x[4]-.3980025455*x[1]^2*x[3]-.6930099670*x[1]^2*x[4]+.4706522655e-1*x[3]*x[4]^2-.1116791525*x[2]*x[4]^2+.2080615260*x[2]*x[3]*x[4]+.2585627925*x[2]*x[3]^2+.4305264490*x[1]*x[4]^2+.2721448717*x[1]*x[3]*x[4]-.180122115e-2*x[1]*x[3]^2+.7113892375*x[1]*x[2]*x[4]+.3076408925*x[1]*x[2]*x[3]+.1306746479*x[1]^3-.4310070930*x[1]^2*x[2]+.3239270337*x[1]*x[2]^2-.1936920740*x[2]^3-.3779573680*x[2]^2*x[4]-.1482310395*x[2]^2*x[3]-.3412919215e-1*x[4]^3+.2174698045e-1*x[3]^2*x[4]+.85495945e-4*x[3]^3
-.1517631967e-2*x[1]+.1782130295*x[2]+.1260848574e-1*x[3]+.3302864384e-1*x[4]+.2030868454e-1*x[1]^2*x[3]+.4502926894e-1*x[1]^2*x[4]+.2686400356e-1*x[3]*x[4]^2+.1288043807*x[2]*x[4]^2+.1432329696*x[2]*x[3]*x[4]+.4994217623e-1*x[2]*x[3]^2-.3257519144e-1*x[1]*x[4]^2-.2313099667e-1*x[1]*x[3]*x[4]-.1373574566e-1*x[1]*x[3]^2-.6788681260e-1*x[1]*x[2]*x[4]-.8135669635e-2*x[1]*x[2]*x[3]-.5173321000e-2*x[1]^3+.7128029135e-1*x[1]^2*x[2]-.3542465172e-1*x[1]*x[2]^2+.9497375780e-1*x[2]^3+.1860270299*x[2]^2*x[4]+.9873376500e-1*x[2]^2*x[3]+.2370759546e-1*x[4]^3-.2133928280e-1*x[3]^2*x[4]-.2399522444e-3*x[3]^3
5 Example 60 5.1 State Feedback Controller
The same is true for the simulations with the controller (carried out in MATLAB/SIMULINK) if termsup to third order are used (Fig. 5.1.2 as compared to Figures 2 to 4 in [16]). With the linear approxi-mation , the trajectory starting at [5 5 –2 2]T tends to a limit cycle while with , ittends to the origin. With , however, the trajectory is unstable. This is not surprisingsince the approximation of trigonometric functions by power series is not very good for large argu-ments (Fig. 5.1.3).
u*1( ) u*
1( ) u*3( )+
u*1( ) u*
3( ) u*5( )+ +
-5 0 5-6
-4
-2
0
2
4
6
Phase portrait: ξ
ξ
-4 -2 0 2 4-4
-2
0
2
Phase portrait: Θ
Θ
1st order3rd order5th order
0 10 20 30 40 50-5
0
5Control variables
time s
uξ
Θ
Figure 5.1.2: Simulations with initial
condition [5 5 –2 2]T.
Figure 5.1.3: sin(x) and its approximation .
-5 0 5-5
0
5
x16---x3–
1120---------x5+
5 Example 61 5.1 State Feedback Controller
As Figure 5.1.4 shows, for considerably smaller initial conditions ([1.5 1.5 –0.6 0.6]T), a simula-tion with is stable. Again, the control signals including these fifth-order terms havethe largest magnitude. The trajectories do not tend to the origin faster than with alone.
No general conclusion should be drawn from this example since it is not clear at all why it shouldbe reasonable to penalize all four state variables in the same way, as is done here. If Z(x, w, u) inexpression (5.1.3) had been chosen differently, more reasonable control signals could result. In fact,it must be expected that the plant has to be augmented with dynamic weighting functions as in thelinear case [6]. The investigation of such weightings for L2 gain synthesis is the topic of on-goingresearch.
u*1( ) u*
3( ) u*5( )+ +
u*1( ) u*
3( )+
1st order3rd order5th order
Figure 5.1.4: Simulations with initial
condition [1.5 1.5 –0.6 0.6]T.
-2 -1 0 1 2
-1.5
-1
-0.5
0
0.5
1
1.5
Phase portrait: ξ
ξ
-1 0 1 2 3
-1.5
-1
-0.5
0
0.5
1
1.5
Phase portrait: Θ
Θ
0 10 20 30 40 50-1.5
-1
-0.5
0
0.5
1
1.5Control variables
time s
uξ
Θ
5 Example 62 5.2 Output Feedback Controllers
5.2 Output Feedback ControllersThe example for the output feedback case is constructed out of the previous example by feeding
back only the two positions ξ and Θ (x1 and x3). In order to satisfy all the assumptions, additionalexogenous inputs must be introduced. The equations defining the plant now read:
(5.2.1)
(5.2.2)
(5.2.3)
where α is a small number here chosen to be .
For the computation of the controllers, the additional term of the secondHJI equation introduced on page 23 is of crucial importance. With ϕ = 10–8, some of the entries inthe solution of the Riccati equation (3.2.7) have an order of magnitude of 10–7. Hence, the sec-ond-order approximation of has coefficients as large as 107, while those of higher orders areeven larger. The coefficients of the factors L(x) and R(x) of the output injection matrix (equa-tion (2.3.14)) are of the same magnitude, which obviously is not reasonable for any simulation. Onlyby increasing ϕ considerably to , coefficients of an acceptable magnitude are obtainedwhich allow for the simulations shown below.
The term Θ(x) corresponds to an additional exogenous input affecting all of the state variables. Thelarger ϕ is chosen, the more uncertain the input of the plant relative to its measured output becomes.Hence, the reconstruction of the state must depend on the output injection rather than on the propa-gation of the input. The dynamics of the observer will be faster.
ξ
ξ
Θ
Θ
ξ
ξ– εΘ2 Θsin uε Θcos– w1+ +
1 ε2 Θcos2–--------------------------------------------------------------------------- αw2+
Θ
ε Θcos ξ εΘ2 Θsin–( ) u w1ε Θcos–+
1 ε2 Θcos2–-------------------------------------------------------------------------------------------- αw3+
=
z
0.1x1
0.1x2
0.1x3
0.1x4
u
=
yx1 αw2+
x3 αw3+=
α 0.0001=
Φ x( ) ϕW x x( )W xT x( )=
P 1–
W x( )G x( )
ϕ 10 2–=
5 Example 63 5.2 Output Feedback Controllers
The following Maple commands are used to compute the controller of third approximation order:# TORA Examplerestart;alias(hinfOF=hinfOF_x);with(linalg):read `aresolve`:read `hinfOF`;read `wrtMEXctrl`:read `wrtMEXfile`:read `lyapsolve`:read `sysbal`:Digits := 28;epsilon := 1/2:x := vector([x1, x2, x3, x4]):w := vector(3):X := vector([x[2], (-x[1]+epsilon*x[4]^2*sin(x[3]) - (epsilon*cos(x[3])*u) + w[1]) /(1-epsilon^2*cos(x[3])^2) + 0.0001*w[2], x[4], (epsilon*cos(x[3])*(x[1]-epsilon*x[4]^2*sin(x[3])) + u - (epsilon*cos(x[3])*w[1])) / (1-epsilon^2*cos(x[3])^2)]):Y := vector([x[1]+0.0001*w[2], x[3]+0.0001*w[3]]):Z := vector([seq(sqrt(0.1)*x[i], i = 1..4), u]):G := [X, Z, Y]:var := [x, w, vector([u])]:Gamma := 3;approxord := 3;psi := 0.;phi := 1e-2;orderOnly := true:balance := false:Name:=`TORAContr`.approxord.`xu`;if true then K := hinfOF(G, var, approxord, Gamma,2, 1e-10, psi, phi, orderOnly, balance, Name):else K := hinfOF(G, var, approxord, Gamma,2, 1e-10, psi, phi, orderOnly, balance): wrtMEXfile(K[1][1], K[1][2], Name);fi;cmd:=`mv `.Name.`.c ../TORA/`.Name.`.c`;system(cmd);
In the third line of the listing, an alias is defined for hinfOF_x. This alias allows to convenientlyswitch to hinfOF_p by just replacing the x by a p in that line. The name for the file to which thecontroller is written is constructed to include the approximation order (for this third order example,TORAContr3xu results). The last two lines move the controller file to the directory TORA, wherethe SIMULINK environment for the simulation is stored. These two lines only work within the UNIXoperating system.
5 Example 64 5.2 Output Feedback Controllers
As before, controllers of first, third, and fifth approximation order are computed and compared insimulations. The initial conditions are set to 0.4·[1.5 1.5 –0.6 0.6]T (Fig. 5.2.1).
The controllers for these simulations are computed with the first approach (approximation in x).For the higher approximation orders, the state space descriptions of the controllers can no longer becomputed since the inversion for the computation of the output injection gain cannot be computedsymbolically. Hence, the inversions are computed on-line.
Figure 5.2.1: Simulations with initial
condition 0.4·[1.5 1.5 –0.6 0.6]T.Controller approximated in x.
-0.5 0 0.5 1
-0.5
0
0.5
ξ
Phase portrait: ξ
-0.5 0 0.5 1 1.5-0.5
0
0.5
1
1.5
Θ
Phase portrait: Θ0 10 20 30 40 50
-1.5
-1
-0.5
0
0.5
1
1.5
u
time s
Control variables
1st order3rd order5th order
Θ
ξ
5 Example 65 5.2 Output Feedback Controllers
Simulations with controllers based on the alternative approach (approximation in p) are shown inFigure 5.2.2.
Figure 5.2.2: Simulations with initial
condition 0.4·[1.5 1.5 –0.6 0.6]T.Controller approximated in p.
1st order3rd order5th order
-0.5 0 0.5 1
-0.5
0
0.5
ξ
Phase portrait: ξ
-0.5 0 0.5 1 1.5-0.5
0
0.5
1
Θ
Phase portrait: Θ0 10 20 30 40 50
-1.5
-1
-0.5
0
0.5
1
1.5
u
time s
Control variables
Θ
ξ
66
Appendix: Derivatives
Derivative of a scalar f(x) with respect to the vector :
may also be written as .
Derivative of a vector with respect to the vector :
Hessian: second derivative of f(x) with respect to x:
Second derivative of a scalar with respect to the vectors and :
x Rn∈
x∂∂
f x( )x1∂∂
f x( )x2∂∂
f x( ) …xn∂∂
f x( )=
x∂∂
f x( ) f x x( )
F x( ) Rm∈ x Rn∈
x∂∂
F x( )
x1∂∂
F1 x( )x2∂∂
F1 x( ) …xn∂∂
F1 x( )
x1∂∂
F2 x( ) …xn∂∂
F2 x( )
: :
x1∂∂
Fm x( ) …xn∂∂
Fm x( )
Rm n×∈=
x2
2
∂∂
f x( )
x12
2
∂∂
f x( )x1∂∂
x2∂∂
f x( ) …x1∂∂
xn∂∂
f x( )
: :
xn∂∂
x1∂∂
f x( ) …xn
2
2
∂∂
f x( )
=
g x y,( ) x Rn∈ y Rm∈
y∂∂
x∂∂
g x y,( )y1∂∂
x1∂∂
g x y,( )y1∂∂
x2∂∂
g x y,( ) …y1∂∂
xn∂∂
g x y,( )
: :
ym∂∂
x1∂∂
g x y,( ) …ym∂∂
xn∂∂
g x y,( )
=
y∂∂
x∂∂
g x y,( ) T
T
=
x∂∂
y∂∂
g x y,( ) T
=
yTy∂
∂x∂
∂g x y,( )
x xTx∂
∂y∂
∂g x y,( )
y=
67
Chain and product rulesDerivative of :
Derivative of :
Derivative of :
Derivative of with :
Derivative of with respect to x and y:
rather than: , which has incompatible dimensions
zT Ax zT Ax( )T xT AT z= =
x∂∂
zT Ax zT A=
FT x( )
x∂∂
FT x( )x∂
∂F x( )
T=
H F x( )( ) Rp∈
x∂∂
H F x( )( )F∂∂
H F( )
x∂∂
F x( ) Rp n×∈=
GT x( )F x( ) G x( ) Rm∈
x∂∂
GT x( )F x( )G∂∂
GT x( )F x( )( )
x∂∂
G x( )F∂∂
GT x( )F x( )( )
x∂∂
F x( )+=
G∂∂
FT x( )G x( )( )
x∂∂
G x( ) GT x( )x∂
∂F x( )+=
FT x( )x∂
∂G x( ) GT x( )
x∂∂
F x( )+=
yT F x( )
yTy∂
∂x∂
∂yT F x( )
x∂
∂y∂
∂FT x( )y
y=
x∂∂
FT x( ) y=
x∂∂
F x( ) T
y=
yTy∂
∂x∂
∂yT F x( )
yTy∂
∂yT
x∂∂
F x( )
yT
x∂∂
F x( ) T
= =
68
References
1 F. Allgöwer, A. Rehm, E. D. Gilles: “An engineering perspective on nonlinear H∞ control.”Proc. 33rd IEEE Conference on Decision and Control, pp. 2537 – 2542, 1994.
2 A. Astolfi: Attenuazione dei disturbi nei sistemi non lineari. Tesi di Dottorato, Università diRoma “La Sapienza”, 1995.
3 R. Beard: Improving the Closed-Loop Performance of Nonlinear Systems. PhD dissertation,Rensselaer Polytechnic Institute, Troy, NY, 1995.
4 R. Beard, G. Saridis, J. Wen: “Improving the performance of stabilizing controls for nonlinearsystems.” IEEE Control Systems Magazine, vol. 16, no. 5, Oct. 1996, 27 – 35.
5 R. T. Bupp, D. S. Bernstein, V. T. Coppola: “A benchmark problem for nonlinear controldesign: problem statement, experimental testbed, and passive nonlinear compensation.” Proc.American Control Conference, 1995, 4363 – 4367.
6 U. Christen: Engineering aspects of H∞ control, Diss. ETH No 11433, ETH Zurich, 1996.
7 J. C. Doyle, K. Glover, P. P. Khargonekar, B. A. Francis: “State-space solutions to standard H2and H∞ control problems.” IEEE Transactions on Automatic Control, vol. 34, 1989, 831 – 846.
8 G. Engeln-Müllges, F. Reutter: Formelsammlung zur Numerischen Mathematik mit C-Pro-grammen. Bibliographisches Institut und F. A. Brockhaus, Zürich, 1987.
9 P. Gahinet, A. Nemirovski, A. J. Laub, M. Chilali: LMI Control Toolbox User’s Guide. TheMathWorks, Inc., Natick, 1995.
10 H. P. Geering: Robuste Regelung. Vorlesungsskript ETH Zürich, WS 1996/97.
11 A. Isidori: Nonlinear Control Systems. 3rd edition, Springer-Verlag, Berlin, 1995.
12 A. Isidori: “New results on nonlinear H∞-control via measurement feedback.” T. Ba ar, A. Hau-rie (Eds): Advances in Dynamic Games and Applications. Birkhäuser, Boston, 1994, 56 – 69.
13 A. Isidori, W. Kang: “H∞ control via measurement feedback for general nonlinear systems.”IEEE Transactions on Automatic Control, vol. 40, 1995, 466 – 472.
14 W. Kang, P. K. De, A. Isidori: “Flight control in a windshear via nonlinear H∞ methods.” Proc.31st IEEE Conference on Decision and Control, 1992, 1135 – 1142.
15 D. L. Lukes: “Optimal regulation of nonlinear systems.” SIAM Journal of Control, vol. 7, 1969,75 – 100.
16 P. Tsiotras, M. Corless, M. A. Rotea: “An L2 disturbance attenuation approach to the nonlinearbenchmark problem.” Proc. American Control Conference, 1995, 4352 – 4356.
s