Извлеките структуру muinfo
, возвращенную mussv
[VDelta,VSigma,VLmi] = mussvextract(muinfo)
Структурированное вычисление сингулярного значения формы
[bounds,muinfo] = mussv(M,BlockStructure)
возвращает подробную информацию в структуре muinfo
. mussvextract
используется, чтобы извлечь сжатую информацию в muinfo
в удобочитаемую форму.
Самый общий вызов mussvextract
извлекает три применимых количества: VDelta
, VSigma
и VLmi
. VDelta
используется, чтобы проверить нижнюю границу. VSigma
используется, чтобы проверить верхнюю границу Newlin/Young и имеет поля DLeft
, DRight
, GLeft
, GMiddle
и GRight
. VLmi
используется, чтобы проверить верхнюю границу LMI и имеет поля Dr, Dc, Grc
и Gcr
. Отношение/интерпретация этих количеств с числовыми результатами в bounds
описано ниже.
Верхняя граница основана на доказательстве, что det(I - M*Delta)
является ненулевым для всех блочно-структурированных матриц Delta
с нормой, меньшей, чем 1/bounds(1)
. Метод Newlin/Young состоит из нахождения скаляра β и матрицы D и G, сопоставимый с BlockStructure
, таким что
Здесь DL, DR, GL, GM и GR соответствуют DLeft
, DRight
, GLeft
, GMiddle
и полям GRight
соответственно.
Поскольку некоторые блоки неуверенности и M
не должны быть квадратными, матрицы, D и G имеют несколько различных проявлений. На самом деле, в формуле выше, существует левый и правый D и G, а также средний G. Любой такой β является верхней границей mussv(M,BlockStructure)
.
Это верно, что, если BlockStructure
будет состоять только из комплексных блоков, то все матрицы G будут нулем, и выражение выше упрощает до
Метод LMI состоит из нахождения скаляра β и матрицы D и G, сопоставимый с BlockStructure
, таким что
отрицателен полуопределенный. Снова, D и G имеют несколько различных проявлений, чтобы совпадать с размерностями строки и столбца M. Любой такой β является верхней границей mussv(M,BlockStructure)
. Если BlockStructure
будет состоять только из комплексных блоков, то все матрицы G будут нулем и отрицательной полуопределенностью M, ´Dr M-β2Dc достаточен, чтобы вывести верхнюю границу.
Нижняя граница mussv(M,BlockStructure)
основана на нахождении “маленького” (надо надеяться, самое маленькое) блочно-структурированный матричный VDelta
, который заставляет det(I - M*VDelta)
равняться 0. Эквивалентно, матричный M*VDelta
имеет собственное значение, равное 1. Это всегда будет верно, что нижняя граница (bounds(2))
будет обратной величиной norm(VDelta)
.
Предположим, что M
является комплексной матрицей 4 на 4. Возьмите блочную структуру, чтобы быть двумя комплексными блоками 1 на 1 и одним комплексным блоком 2 на 2.
rng(0,'twister') M = randn(4,4) + sqrt(-1)*randn(4,4); BlockStructure = [1 1;1 1;2 2];
Можно вычислить границы на структурированное сингулярное значение с помощью команды mussv
и извлечь масштабирующиеся матрицы с помощью mussvextract
.
[bounds,muinfo] = mussv(M,BlockStructure); [VDelta,VSigma,VLmi] = mussvextract(muinfo);
Можно сначала проверить верхнюю границу Newlin/Young с информацией, извлеченной от muinfo
. Соответствующими масштабированиями является Dl
и 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
Можно сначала проверить верхнюю границу LMI с информацией, извлеченной от muinfo
. Соответствующими масштабированиями является Dr
и 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
Обратите внимание на то, что VDelta
совпадает со структурой, заданной BlockStructure
, и норма VDelta
соглашается с нижней границей,
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
и что M*VDelta
имеет собственное значение точно в 1.
eig(M*VDelta)
ans = 1.0000 - 0.0000i -0.2501 - 0.1109i 0.0000 + 0.0000i -0.3022 + 0.2535i
Сохраните матрицу тем же самым, но измените BlockStructure
, чтобы быть повторным, действительным скалярным блоком 2 на 2, и два комплекса 1 на 1 блокируются. Запустите mussv
с опцией 'C'
, чтобы сжать верхнюю границу.
BlockStructure2 = [-2 0; 1 0; 1 0]; [bounds2,muinfo2] = mussv(M,BlockStructure2,'C');
Можно сравнить вычисленные границы. Обратите внимание на то, что bounds2
должен быть меньшим, чем bounds
, потому что набор неуверенности, заданный BlockStructure2
, является собственным подмножеством заданного BlockStructure
.
[bounds; bounds2]
ans = 6.2950 6.2704 5.1840 5.1750
Можно извлечь D, G и Delta
от muinfo2
с помощью mussvextract
.
[VDelta2,VSigma2,VLmi2] = mussvextract(muinfo2);
Как прежде, можно сначала проверить верхнюю границу Newlin/Young с информацией, извлеченной от muinfo
. Соответствующими масштабированиями является 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
Можно сначала проверить верхнюю границу LMI с информацией, извлеченной от muinfo
. Соответствующими масштабированиями является 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
совпадает со структурой, заданной BlockStructure
, и норма VDelta2
соглашается с нижней границей,
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
и что M*VDelta2
имеет собственное значение точно в 1.
eig(M*VDelta2)
ans = 1.0000 + 0.0000i -0.4328 + 0.1586i 0.1220 - 0.2648i -0.3688 - 0.3219i