Compute lower bounds on the worstcase $\mathcal{H}_\infty$ norm for real perturbations.
Description
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.
Syntax
[lbnd,wc,pert,tab]=hinflb_real(sys,blk{,options})
Input arguments
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:

Output arguments
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:

Example
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
See also
mulb
mulb_1real
mulb_nreal
mulb_mixed
gen_grid
display_sector
Reference
[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. 