You are here

Routine mubb

Compute bounds on the (skewed) robust stability margin or on the worst-case $\mathcal{H}_\infty$ norm with desired accuracy.

Description

Let us consider the following interconnections between a nominal LTI system $M(s)$ and a block-diagonal operator $\Delta(s)$.

If $M(s)$ has no exogenous input and output, a robust stability problem is considered: (skew-)$\mu$ upper and lower bounds, i.e. lower and upper bounds $k_{lb}$ and $k_{ub}$ on the robustness margin $k_{max}$, are computed (see problem 1 on the overview page of the toolbox for more details). The lower bound $k_{lb}$ is guaranteed on a whole frequency interval and satisfies $k_{ub}\le (1+\epsilon)k_{lb}$, where $\epsilon$ is a user-defined threshold. A destabilizing value $\tilde{\Delta}(s)$ of $\Delta(s)$ associated to the upper bound $k_{ub}$ is also determined, and the considered stability region can be bounded either by the imaginary axis or by a truncated sector.

If $M(s)$ has exogenous inputs $e$ and outputs $y$, a worst-case $\mathcal{H}_\infty$ performance problem is considered: lower and upper bounds $\gamma_{lb}$ and $\gamma_{ub}$ are computed on the highest $\mathcal{H}_\infty$ norm $\gamma_{max}$ of the transfer matrix between $e$ and $y$ when $\Delta(s)$ takes any admissible value (see problem 2 on the overview page of the toolbox for more details). The upper bound $\gamma_{ub}$ is guaranteed on a whole frequency interval and satisfies $\gamma_{ub}\le (1+\epsilon)\gamma_{lb}$, where $\epsilon$ is a user-defined threshold. A value $\tilde{\Delta}(s)$ of $\Delta(s)$ for which the lower bound $\gamma_{lb}$ is obtained is also determined, and the $\mathcal{H}_\infty$ norm can be computing either along the imaginary axis or along the boundary of a truncated sector.

Note: In both cases, the initial interconnection is normalized with convert_data before the problem is solved.

Syntax

[bnds,wc,pert,iodesc]=mubb(usys{,skew/perf,options})
[bnds,wc,pert,iodesc]=mubb(gsys{,skew/perf,options})
[bnds,wc,pert,iodesc]=mubb(lsys{,skew/perf,options})
[bnds,wc,pert,iodesc]=mubb(sys,blk{,skew/perf,options})

Input arguments

The interconnection between $M(s)$ and $\Delta(s)$ can be described by:

  • a USS object usys,
  • a GSS object gsys,
  • a LFR object lsys,
  • a LTI object sys describing the LTI system $M(s)$ and a $N\times 2$ matrix blk defining the structure of the block-diagonal operator $\Delta(s)=diag\left(\Delta_1(s),\dots,\Delta_N(s)\right)$:
    • blk(i,:)=[-ni 0] $\Rightarrow$ $\Delta_i(s)=\delta_iI_{n_i}$ with $\delta_i$ real,
    • blk(i,:)=[ni 0] $\Rightarrow$ $\Delta_i(s)=\delta_iI_{n_i}$ with $\delta_i$ complex,
    • blk(i,:)=[ni mi] $\Rightarrow$ $\Delta_i(s)$ is a $n_i\times m_i$ LTI system.

For a robust stability problem, an additional input argument skew can be defined, indicating whether the maximum admissible $\mathcal{H}_\infty$ norm of each $\Delta_i(s)$ is bounded (skew(i)=0) or not (skew(i)=1). If skew is undefined, skew(i) is set to 1 for all $i=1,\dots,N$, which means that a classical $\mu$ problem is considered.

For a worst-case $\mathcal{H}_\infty$ performance problem, an additional input argument perf can be defined to specify how the transfer between $e$ and $y$ is structured. Each line of perf corresponds to a performance channel. For example, if perf=[2 1;1 3], the transfer between inputs 1-2 and output 1 is considered independently of the one between input 3 and outputs 2-3-4. If perf is undefined, it is set to [ne ny], where ne and ny denote the size of the signals $e$ and $y$.

The last input argument options is an optional structured variable with fields:

maxgap Maximum gap between the bounds. The default value is options.maxgap=0.05, i.e. 5%. In case of a $\mu$-test, (options.umax>0), options.maxgap is used to set options.tol in muub_mixed.
maxcut Maximum number of times the real parametric domain can be bisected. The default value is options.maxcut=100.
maxtime Maximum computational time. The default value is options.maxtime=Inf.
freq Frequency interval $\Omega$ in rad/s on which the bounds are to be computed. The default value is options.freq=[0 10*max(abs(eig(sys)))].
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.
trace Trace of execution. The default value is options.trace=1.
warn Warnings display. The default value is options.warn=1.
umax If nonzero, the algorithm checks whether the (skew-)$\mu$ upper bound or the upper bound the worst-case $\mathcal{H}_\infty$ norm is less than options.umax ($\mu$-test). In this case, no lower bound is computed. The default value is options.umax=0.

Additional fields can be defined (see mubb_mixed), but the ones listed above are usually sufficient for non-expert users.

Output arguments

bnds Bounds $k_{lb}$ and $k_{ub}$ on the robustness margin for the normalized interconnection, or bounds $\gamma_{lb}$ and $\gamma_{ub}$ on the worst-case $\mathcal{H}_\infty$ norm for each performance channel, on the considered frequency interval $\Omega$.
wc Frequency $\omega_c$ in rad/s for which $k_{ub}$ or $\gamma_{lb}$ has been computed.
pert The normalized interconnection is unstable (robust stability problem) or the $\mathcal{H}_\infty$ norm of the transfer between $e$ and $y$ is greater than or equal to $\gamma_{lb}$ (worst-case $\mathcal{H}_\infty$ performance problem) for every perturbation $\tilde{\Delta}(s)$ whose frequency response $\tilde{\Delta}(p(\omega_c))$ is equal to pert, where $p(\omega_c)$ denotes the point $j\omega_c$ on the imaginary axis or the corresponding point on the boundary of the truncated sector defined by options.sector.
iodesc Cell array of structured variables:

  • The name of the ith uncertainty $\Delta_i(s)$ is given by iodesc{i}.name.
  • Its type is given by iodesc{i}.type:
    • 'real scalar' $\Rightarrow$ $\Delta_i(s)=\delta_iI_{n_i}$ with $\delta_i$ real,
    • 'complex scalar' $\Rightarrow$ $\Delta_i(s)=\delta_iI_{n_i}$ with $\delta_i$ complex,
    • 'dynamical system' $\Rightarrow$ $\Delta_i(s)$ is a $n_i\times m_i$ LTI system.
  • A third field gives the values of $\Delta_i(s)$ for which the stability of the initial interconnection is guaranteed (robust stability problem) or the $\mathcal{H}_\infty$ norm of the transfer between $e$ and $y$ is guaranteed to be less than $\gamma_{ub}$ (worst-case $\mathcal{H}_\infty$ performance problem):
    • if iodesc{i}.type='real scalar', $\delta_i$ belongs to the real interval iodesc{i}.range,
    • if iodesc{i}.type='complex scalar', $\delta_i$ belongs to the disc of center iodesc{i}.disc(1) and radius iodesc{i}.disc(2),
    • if iodesc{i}.type='dynamical system', $\overline{\sigma}(\Delta_i(p(\omega)))<|W(p(\omega))|$ for all $\omega\in\Omega$, where $p(\omega)$ denotes the point $j\omega$ on the imaginary axis or the corresponding point on the boundary of the truncated sector defined by options.sector, and where a representation of $W(s)$ is given by iodesc{i}.bound.
  • The initial interconnection is unstable (robust stability problem) or the $\mathcal{H}_\infty$ norm of the transfer between $e$ and $y$ is greater than or equal to $\gamma_{lb}$ (worst-case $\mathcal{H}_\infty$ performance problem) for every perturbation $\tilde{\Delta}(s)$ whose frequency response $\tilde{\Delta}(p(\omega_c))$ is defined as follows:
    • $\tilde{\delta}_i=$iodesc{i}.value if iodesc{i}.type='real scalar' or 'complex scalar',
    • $\tilde{\Delta}_i(p(\omega_c))=$iodesc{i}.value if iodesc{i}.type='dynamical system'.

In case a worst-case $\mathcal{H}_\infty$ performance problem is considered, the last cell of iodesc is associated to the performance channels. In this case, iodesc{end}.name='', iodesc{end}.type='performance channel', and iodesc{end}.norm and iodesc{end}.maxnorm contain the lower and upper bounds $\gamma_{lb}$ and $\gamma_{ub}$ on the worst-case $\mathcal{H}_\infty$ norm for each performance channel respectively.

Example

1. Robust stability problem

Description of the uncertain system by a USS object:
a1=ureal('a',5,'Percentage',20);
b1=ucomplex('b',4+3*sqrt(-1),'Percentage',40);
c1=ultidyn('c',[2 1],'Bound',2,'Type','GainBounded');
A1=[-3*a1*b1-2 1;a1 -b1^2-1]+c1*[a1 -b1];
usys=lft(tf({1 0;0 1},[1 0]),A1);
usys=simplify(usys,'full');

Computation of bounds $k_{lb}$ and $k_{ub}$ on the robustness margin $k_{max}$ for the normalized interconnection:
options.lmi=1;
options.maxgap=0.005;
[bnds1,wc1,pert1,iodesc1]=mubb(usys,options);
k_lb=1/bnds1(2),k_ub=1/bnds1(1)

Values of $\Delta(s)$ for which the stability of the initial interconnection is guaranteed and frequency response $\tilde{\Delta}(\omega_c)$ of a perturbation $\tilde{\Delta}(s)$ which makes the initial interconnection unstable:
iodesc1{:}
sys1=usubs(usys,'a',iodesc1{1}.value,'b',iodesc1{2}.value,'c',iodesc1{3}.value);
damp(sys1)

Description of the uncertain system by a GSS object:
a3=gss('a',5,[4 6]);
b3=gss('b',4+3i,[4 3 2]);
c3=gss('c','LTI',[2 1],0,2);
A3=[-3*a3*b3-2 1;a3 -b3^2-1]+c3*[a3 -b3];
gsys=abcd2gss(A3,2);

Computation of bounds $k_{lb}$ and $k_{ub}$ on the robustness margin $k_{max}$ for the normalized interconnection:
options.lmi=1;
options.maxgap=0.005;
[bnds3,wc3,pert3,iodesc3]=mubb(gsys,options);
k_lb=1/bnds3(2),k_ub=1/bnds3(1)

Values of $\Delta(s)$ for which the stability of the initial interconnection is guaranteed and frequency response $\tilde{\Delta}(\omega_c)$ of a perturbation $\tilde{\Delta}(s)$ which makes the initial interconnection unstable:
iodesc3{:}
sys3=eval(gsys,{'a' 'b' 'c'},{iodesc3{2}.value iodesc3{3}.value iodesc3{1}.value});
damp(sys3)

2. Worst-case $\mathcal{H}_\infty$ performance problem

Description of the uncertain system by a LFR object:
a2=lfr('a','ltisr',1,[4 6],'minmax');
b2=lfr('b','ltisc',1,[4+3*sqrt(-1) 2],'disc');
c2=lfr('c','ltifc',[2 1],ltisys([],[],[],2),'freq');
d2=lfr('d','ltifc',[2 2],ltisys(-1,1,3,2),'freq');
A2=[-3*a2*b2-2 1;a2 -b2^2-1]+c2*[a2 -b2];
B2=[1 3;2 a2];
C2=d2*[b2 1;2 -3];
D2=[0 2;0 1];
lsys=abcd2lfr([A2 B2;C2 D2],2);
lsys=minlfr(lsys);
size(lsys)

Computation of bounds $\gamma_{lb}$ and $\gamma_{ub}$ on the worst-case $\mathcal{H}_\infty$ norm $\gamma_{max}$:
[bnds2,wc2,pert2,iodesc2]=mubb(lsys,options);
gamma_lb=bnds2(1),gamma_ub=bnds2(2)

Values of $\Delta(s)$ for which the worst-case $\mathcal{H}_\infty$ norm is guaranteed to be less than $\gamma_{ub}$ for the initial interconnection and frequency response $\tilde{\Delta}(\omega_c)$ of a perturbation $\tilde{\Delta}(s)$ for which the $\mathcal{H}_\infty$ norm or the initial interconnection is equal to $\gamma_{lb}$:
iodesc2{:}
a=iodesc2{1}.value;b=iodesc2{2}.value;c=iodesc2{3}.value;d=iodesc2{4}.value;
sys2=eval(lsys);
svd(calc_freq_resp(ss(sys2.a,sys2.b,sys2.c,sys2.d),wc2,[0 0]))

See also

mubb_mixed
convert_data
make_square