Compute lower bounds on the worstcase $\mathcal{H}_\infty$ norm for real perturbations.
This routine computes lower bounds on the worstcase $\mathcal{H}_\infty$ norm for an interconnection between a nominal LTI system $M(s)$ and a blockdiagonal 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 blockdiagonal 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 worstcase $\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 blockdiagonal 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(end1) 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 worstcase configuration. Otherwise, it also tries to detect local maxima, but the probability to determine the global worstcase 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 worstcase $\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.a0.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 worstcase $\mathcal{H}_\infty$ performance computation", in Proceedings of the IEEE Multiconference on Systems and Control, Yokohama, Japan, September 2010, pp. 380385. 