Compute lower bounds on the worst-case $\mathcal{H}_\infty$ norm for real perturbations.
This routine computes lower bounds on the worst-case $\mathcal{H}_\infty$ norm for an interconnection between a nominal LTI system $M(s)$ and a block-diagonal operator $\Delta=diag\left(\Delta_1,\dots,\Delta_N\right)$, where $\Delta_i=\delta_iI_{n_i}$ and $\delta_i$ is real. Lower bounds are first computed on a rough frequency grid. A series of quadratic programming problems is then solved using these results as an initialization.
Let $\mathcal{B}_{\bf\Delta}$ be the set of all admissible block-diagonal operators $\Delta$ such that $|\delta_i|<1$ for all $i=1,\dots,N$. Assume that the interconnection between $M(s)$ and $\Delta$ is stable for all $\Delta\in\mathcal{B}_{\bf\Delta}$. Let $\mathcal{F}_u(M(s),\Delta)$ denote the transfer matrix from $e$ to $y$, which must be square (see make_square
). The worst-case $\mathcal{H}_\infty$ norm is defined by:
$$\max_{\Delta\in\mathcal{B}_{\bf\Delta}} \|\mathcal{F}_u(M(s),\Delta)\|_\infty$$
where the $\mathcal{H}_\infty$ norm can be computed either on the imaginary axis or on the boundary of a truncated sector.
Note: The aim is not to compute a lower bound as a function of frequency but to compute a lower bound over the whole frequency range. The frequency for which the largest singular value of the transfer matrix from $e$ to $y$ is maximum is left free during the optimization and can be very far from the initial one. Thus, a rough initial grid is usually sufficient to capture the most critical frequencies.
[lbnd,wc,pert,tab]=hinflb_real(sys,blk{,options})
The first two input arguments are mandatory:
sys |
LTI object describing the nominal system $M(s)$. |
blk |
Matrix defining the structure of the block-diagonal operator $\Delta=diag\left(\Delta_1,...,\Delta_N\right)$. Its first 2 columns must be defined as follows for all $i=1,...,N$:
|
The third input argument options
is an optional structured variable with fields:
freq |
Frequency interval $\Omega$ in rad/s on which the lower bound is to be computed. The default value is options.freq=[0 10*max(abs(eig(sys)))] . |
grid |
Frequency grid in rad/s ($1\times m$ array). It can also be a negative integer -$m$, in which case a $m$-point grid is automatically generated from $\Omega$. The default value is options.grid=-10 . |
sector |
Vector $[\alpha\ \xi]$ or $[\alpha\ \xi\ \omega_c]$ characterizing the considered truncated sector (see display_sector for a complete description). The default value is options.sector=[0 0] , which means that the left half plane is considered. |
target |
The algorithm is interrupted if a lower bound is found which is greater than options.target . The default value is options.target=Inf . |
trace |
Trace of execution. The default value is options.trace=1 . |
warn |
Warnings display. The default value is options.warn=1 . |
wpar |
If zero, frequency is treated as an additional parameter in $\Delta$ and the problem is solved on the intervals [grid(1) grid(2)],...,[grid(end-1) grid(end)] . The default value is options.wpar=0 . |
prec |
Level of precision of the final result (options.prec=2 $\Leftrightarrow$ good precision, options.prec=1 $\Leftrightarrow$ faster but potentially less precise). The default value is options.prec=1 . |
local |
If zero, the algorithm focuses on the global worst-case configuration. Otherwise, it also tries to detect local maxima, but the probability to determine the global worst-case configuration is lower. The default value is options.local=0 . |
method |
$1\times 2$ array defining the method used for the line search:
|
lbnd |
Best lower bound on the worst-case $\mathcal{H}_\infty$ norm on the considered frequency interval $\Omega$. |
wc |
Frequency $\omega_c$ in rad/s for which lbnd has been computed. |
pert |
Associated value of $\tilde{\Delta}$: unless lbnd=0 , the largest singular value of $\mathcal{F}_u(M(\omega_c),\tilde{\Delta})$ is equal to lbnd , where $M(\omega_c)$ is the frequency response of $M(s)$ at $j\omega_c$ (or at the corresponding point on the boundary of the truncated sector defined by options.sector ). |
tab |
Structured variable with fields:
|
System with 10 states and 2 uncertainties. The last two inputs and outputs correspond to the performance channel:
sys=rss(10,5,5);
sys=ss(sys.a-0.1*eye(10),sys.b/10,sys.c/10,sys.d/100);
blk=[-2 0;-1 0];
options.sector=[-0.05 0];
[lbnd,wc,pert,tab]=hinflb_real(sys,blk,options);
max(svd(lft(pert,calc_freq_resp(sys,wc,options.sector))))-lbnd
mulb
mulb_1real
mulb_nreal
mulb_mixed
gen_grid
display_sector
[1] | C. Roos, "A practical approach to worst-case $\mathcal{H}_\infty$ performance computation", in Proceedings of the IEEE Multiconference on Systems and Control, Yokohama, Japan, September 2010, pp. 380-385. |