mussvextract
Extract muinfo structure returned by mussv
Synopsis
[VDelta,VSigma,VLmi] = mussvextract(muinfo)
Description
A structured singular value computation of the form
[bounds,muinfo] = mussv(M,BlockStructure)
returns detailed information in the structure muinfo. mussvextract is
used to extract the compressed information within muinfo into
a readable form.
The most general call to mussvextract extracts
three usable quantities: VDelta, VSigma,
and VLmi. VDelta is used to
verify the lower bound. VSigma is used to verify
the Newlin/Young upper bound and has fields DLeft, DRight, GLeft, GMiddle,
and GRight. VLmi is used to
verify the LMI upper bound and has fields Dr, Dc, Grc,
and Gcr. The relation/interpretation of these quantities
with the numerical results in bounds is described
below.
Upper Bound Information
The upper bound is based on a proof that det(I - M*Delta) is
nonzero for all block-structured matrices Delta with
norm smaller than 1/bounds(1). The Newlin/Young
method consists of finding a scalar β and matrices D and G,
consistent with BlockStructure, such that
Here DL, DR, GL, GM,
and GR correspond to the DLeft, DRight, GLeft, GMiddle,
and GRight fields respectively.
Because some uncertainty blocks and M need
not be square, the matrices D and G have
a few different manifestations. In fact, in the formula above, there
are a left and right D and G,
as well as a middle G. Any such β is an upper
bound of mussv(M,BlockStructure).
It is true that if BlockStructure consists
only of complex blocks, then all G matrices will
be zero, and the expression above simplifies to
The LMI method consists of finding a scalar β and matrices D and G,
consistent with BlockStructure, such that
is negative semidefinite. Again, D and G have
a few different manifestations to match the row and column dimensions
of M. Any such β is an upper bound of mussv(M,BlockStructure).
If BlockStructure consists only of complex blocks,
then all G matrices will be zero, and negative
semidefiniteness of M´Dr M-β2Dc is
sufficient to derive an upper bound.
Lower Bound Information
The lower bound of mussv(M,BlockStructure) is
based on finding a “small” (hopefully the smallest)
block-structured matrix VDelta that causes det(I
- M*VDelta) to equal 0. Equivalently, the matrix M*VDelta has
an eigenvalue equal to 1. It will always be true that the lower bound (bounds(2)) will
be the reciprocal of norm(VDelta).
Examples
Suppose M is a 4-by-4 complex matrix. Take
the block structure to be two 1-by-1 complex blocks and one 2-by-2
complex block.
rng(0,'twister') M = randn(4,4) + sqrt(-1)*randn(4,4); BlockStructure = [1 1;1 1;2 2];
You can calculate bounds on the structured singular value using
the mussv command and extract the scaling matrices
using mussvextract.
[bounds,muinfo] = mussv(M,BlockStructure); [VDelta,VSigma,VLmi] = mussvextract(muinfo);
You can first verify the Newlin/Young upper bound with the information
extracted from muinfo. The corresponding scalings
are Dl and Dr.
Dl = VSigma.DLeft
Dl =
1.0000 0 0 0
0 0.7437 0 0
0 0 1.0393 0
0 0 0 1.0393
Dr = VSigma.DRight
Dr =
1.0000 0 0 0
0 0.7437 0 0
0 0 1.0393 0
0 0 0 1.0393
[norm(Dl*M/Dr) bounds(1)]
ans =
6.2950 6.2950
You can first verify the LMI upper bound with the information
extracted from muinfo. The corresponding scalings
are Dr and Dc.
Dr = VLmi.Dr; Dc = VLmi.Dc; eig(M'*Dr*M - bounds(1)^2*Dc)
ans = -0.0000 - 0.0000i -17.7242 - 0.0000i -33.8550 + 0.0000i -41.2013 - 0.0000i
Note that VDelta matches the structure defined
by BlockStructure, and the norm of VDelta agrees
with the lower bound,
VDelta
VDelta =
0.1301 - 0.0922i 0 0 0
0 -0.0121 - 0.1590i 0 0
0 0 -0.0496 - 0.0708i 0.1272 - 0.0075i
0 0 0.0166 - 0.0163i 0.0076 + 0.0334i
[norm(VDelta) 1/bounds(2)]
ans =
0.1595 0.1595
and that M*VDelta has an eigenvalue exactly
at 1.
eig(M*VDelta)
ans = 1.0000 - 0.0000i -0.2501 - 0.1109i 0.0000 + 0.0000i -0.3022 + 0.2535i
Keep the matrix the same, but change BlockStructure to
be a 2-by-2 repeated, real scalar block and two complex 1-by-1 blocks.
Run mussv with the 'C' option
to tighten the upper bound.
BlockStructure2 = [-2 0; 1 0; 1 0]; [bounds2,muinfo2] = mussv(M,BlockStructure2,'C');
You can compare the computed bounds. Note that bounds2 should
be smaller than bounds, because the uncertainty
set defined by BlockStructure2 is a proper subset
of that defined by BlockStructure.
[bounds; bounds2]
ans =
6.2950 6.2704
5.1840 5.1750
You can extract the D, G and Delta from muinfo2 using mussvextract.
[VDelta2,VSigma2,VLmi2] = mussvextract(muinfo2);
As before, you can first verify the Newlin/Young upper bound
with the information extracted from muinfo. The
corresponding scalings are Dl, Dr, Gl, Gm and Gr.
Dl = VSigma2.DLeft; Dr = VSigma2.DRight; Gl = VSigma2.GLeft; Gm = VSigma2.GMiddle; Gr = VSigma2.GRight; dmd = Dl*M/Dr/bounds2(1) - sqrt(-1)*Gm; SL = (eye(4)+Gl*Gl)^-0.25; SR = (eye(4)+Gr*Gr)^-0.25; norm(SL*dmd*SR)
ans =
1.0000
You can first verify the LMI upper bound with the information
extracted from muinfo. The corresponding scalings
are Dr, Dc, Grc and Gcr.
Dr = VLmi2.Dr; Dc = VLmi2.Dc; Grc = VLmi2.Grc; Gcr = VLmi2.Gcr; eig(M'*Dr*M - bounds(1)^2 *Dc + j*(Gcr*M-M'*Grc))
ans = -69.9757 + 0.0000i -11.2139 - 0.0000i -19.2766 - 0.0000i -40.2869 - 0.0000i
VDelta2 matches the structure defined by BlockStructure,
and the norm of VDelta2 agrees with the lower bound,
VDelta2
VDelta2 =
0.1932 0 0 0
0 0.1932 0 0
0 0 -0.1781 - 0.0750i 0
0 0 0 0.0941 + 0.1688i
[norm(VDelta2) 1/bounds2(2)]
ans =
0.1932 0.1932
and that M*VDelta2 has an eigenvalue exactly
at 1.
eig(M*VDelta2)
ans = 1.0000 + 0.0000i -0.4328 + 0.1586i 0.1220 - 0.2648i -0.3688 - 0.3219i
Version History
Introduced before R2006a