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
Computes an H-infinity optimal controller `K` for an extended plant `P` such that
116
116
||F_l(P, K)||∞ < γ (`lft(P, K)`) for the smallest possible γ given `P`. The routine is
@@ -126,31 +126,35 @@ risk sensitivity" by Glover and Doyle.
126
126
- `tolerance`: For detecting eigenvalues on the imaginary axis.
127
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`.
128
128
- `transform`: Apply coordiante transform in order to tolerate a wider range or problem specifications.
129
-
- `ftype`: construct problem matrices in higher precision for increased numerical robustness.
129
+
- `ftype`: construct problem matrices in higher precision for increased numerical robustness. If the calculated controller achieves
130
+
- `check`: Perform a post-design check of the γ value achieved by the calculated controller. A warning is issued if the achieved γ differs from the γ calculated during design. If this warning is issued, consider using a higher-precision number type like `ftype = BigFloat`.
P̄, Ltrans12, Rtrans12, Ltrans21, Rtrans21 =P, I, I, I, I, I
157
+
P̄, Ltrans12, Rtrans12, Ltrans21, Rtrans21 =Pa, I, I, I, I, I
154
158
end
155
159
156
160
# Run the γ iterations
@@ -191,6 +195,12 @@ function hinfsynthesize(
191
195
mats =bf.(ssdata(K))
192
196
K =ss(mats..., K.timeevol)
193
197
end
198
+
if check
199
+
γactual =hinfnorm2(lft(P, K))[1]
200
+
diff = γ - γactual
201
+
abs(diff) >10gtol &&@warn"Numerical problems encountered, returned γ is adjusted to the γ achieved by the computed controller (γ - γactual = $diff). Try solving the problem in higher precision by calling hinfsynthesize(...; ftype=BigFloat)"
0 commit comments