You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: src/hinfinity_design.jl
+20-5Lines changed: 20 additions & 5 deletions
Original file line number
Diff line number
Diff line change
@@ -44,12 +44,12 @@ function hinfassumptions(P::ExtendedStateSpace; verbose = true)
44
44
# Check assumption A2
45
45
ifrank(D12) <size(D12, 2)
46
46
verbose &&
47
-
@warn("The matrix D12 does not have full rank, ", "violation of assumption A2.")
47
+
@warn("The matrix D12 does not have full rank, ", "violation of assumption A2. The full control signal must have nonzero penalty at infinite frequency.")
48
48
returnfalse
49
49
end
50
50
ifrank(D21) <size(D21, 1)
51
51
verbose &&
52
-
@warn("The matrix D21 does not have full rank, ", "violation of assumption A2.")
52
+
@warn("The matrix D21 does not have full rank, ", "violation of assumption A2. The whole measurement vector y must be corrupted by noise at infinite frequency.")
53
53
returnfalse
54
54
end
55
55
@@ -110,20 +110,29 @@ function _detectable(A::AbstractMatrix, C::AbstractMatrix)
Computes an H-infinity optimal controller K for an extended plant P such that
116
-
||F_l(P, K)||∞ < γ for the largest possible γ given P. The routine is
116
+
||F_l(P, K)||∞ < γ for the smallest possible γ given P. The routine is
117
117
known as the γ-iteration, and is based on the paper "State-space formulae for
118
118
all stabilizing controllers that satisfy an H∞-norm bound and relations to
119
-
risk sensitivity" by Glover and Doyle. See the Bib-entry below [1] above.
119
+
risk sensitivity" by Glover and Doyle.
120
+
121
+
122
+
# Arguments:
123
+
- `maxIter`: Maximum number of γ iterations
124
+
- `interval`: The starting interval for the bisection.
125
+
- `verbose`: Print progress?
126
+
- `tolerance`: Stop when the interval is this small.
127
+
- `γrel`: If `γrel > 1`, the optimal γ will be found by γ iteration after which a controller will be designed for `γ = γopt * γrel`. It is often a good idea to design a slightly suboptimal controller, both for numerical reasons, but also since the optimal controller may contain very fast dynamics. If `γrel → ∞`, the computed controller will approach the 𝑯₂ optimal controller. Getting a mix between 𝑯∞ and 𝑯₂ properties is another reason to choose `γrel > 1`.
120
128
"""
121
129
functionhinfsynthesize(
122
130
P::ExtendedStateSpace;
123
131
maxIter =20,
124
132
interval = (2/3, 20),
125
133
verbose =false,
126
134
tolerance =1e-10,
135
+
γrel =1.01,
127
136
)
128
137
129
138
# Transform the system into a suitable form
@@ -136,6 +145,12 @@ function hinfsynthesize(
136
145
137
146
if!isempty(γFeasible)
138
147
# Synthesize the controller and trnasform it back into the original coordinates
0 commit comments