Извлечение 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). Метод Ньюлина/Янга состоит из поиска скалярного β и матриц D и G, согласующихся с BlockStructure, такой, что
+ GR2) − 14) ≤1
Здесь 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, такой, что
≤0
является отрицательным полуопределением. Опять же, 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 и 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