Задайте систему LMI в командной строке

В этом примере руководства показано, как задать системы LMI в командной строке с помощью инструментов LMI Lab.

Настройка системы LMI

Рассмотрим стабильную передаточную функцию,

G(s)=C(sI-A)-1B.

Предположим, что G имеет четыре входа, четыре выхода и шесть состояний. Рассмотрим также набор матриц D масштабирования ввода/вывода с блочно-диагональной структурой, заданной:

D=(d10000d10000d2d300d4d5).

Следующая проблема возникает в устойчивом анализе устойчивости систем с изменяющейся во времени неопределенностью [4]. Найдите, если таковой имеется, масштабирование D с заданной структурой, таким что самый большой коэффициент усиления на частоте DG(s)D-1 меньше 1.

Эта задача имеет простую формулировку LMI: Существует адекватное масштабирование D, если следующая задача выполнимости имеет решения. Найдите две симметричные матрицы XR6×6 и S=DTDR4×4 таким образом:

(ATX+XA+CTSCXBBTX-S)<0,

X>0,

S>1.

Можно использовать Редактор LMI, чтобы задать задачу LMI, описанную в этих выражениях, как показано в разделе Установка LMI с графический интерфейс пользователя Редактора LMI. Кроме того, задайте его в командной строке используя lmivar и lmiterm, следующим образом.

В данном примере используйте следующие значения для A, B и C.

A = [  -0.8715    0.5202    0.7474    1.0778   -0.9686    0.1005;
       -0.5577   -1.0843    1.8912    0.2523    1.0641   -0.0345;
       -0.2615   -1.7539   -1.5452   -0.2143    0.0923   -2.4192;
        0.6087   -1.0741    0.1306   -2.5575    2.3213    0.2388;
       -0.7169    0.3582   -1.4195    1.7043   -2.6530   -1.4276;
       -1.2944   -0.6752    1.6983    1.6764   -0.3646   -1.7730 ];
  
B = [       0    0.8998   -0.2130    0.9835;
            0   -0.3001         0   -0.2977;
      -1.0322         0   -1.0431    1.1437;
            0   -0.3451   -0.2701   -0.5316;
      -0.4189    1.0128   -0.4381         0;
            0         0   -0.4087         0];
 
C = [      0    2.0034         0    1.0289    0.1554    0.7135;
      0.9707    0.9510    0.7059    1.4580   -1.2371    0.3174;
           0         0    1.4158    0.0475   -2.1935    0.4136;
     -0.4383    0.6489   -1.6045    1.7463   -0.3334   -0.5771];

Задайте переменные LMI X и S, и затем укажите условия каждого LMI.

setlmis([]) 
X = lmivar(1,[6 1]); 
S = lmivar(1,[2 0;2 1]);

% 1st LMI 
lmiterm([1 1 1 X],1,A,'s');
lmiterm([1 1 1 S],C',C); 
lmiterm([1 1 2 X],1,B); 
lmiterm([1 2 2 S],-1,1);

% 2nd LMI 
lmiterm([-2 1 1 X],1,1);

% 3rd LMI
lmiterm([-3 1 1 S],1,1); 
lmiterm([3 1 1 0],1);

LMISYS = getlmis;

The lmivar команды определяют две матричные переменные, X и S. The lmiterm команды описывают термины в каждом LMI. getlmis возвращает внутреннее представление LMISYS этой LMI задачи.

Для получения дополнительной информации о том, как использовать эти команды, смотрите:

Для получения дополнительной информации о том, как lmivar обновляет внутреннее представление задачи LMI, см. «Как lmivar и lmiterm управляют представлением LMI».

Инициализация системы LMI

Описание системы LMI должно начинаться с setlmis и заканчивается на getlmis. Функция setlmis инициализирует описание системы LMI. При указании новой системы вводите

setlmis([])

Добавление к существующей системе LMI с внутренним представлением LMIS0, type

setlmis(LMIS0)

Определение переменных LMI

Матричные переменные объявляются по одному за раз с lmivar и характеризуются своей структурой. Чтобы облегчить спецификацию этой структуры, LMI Lab предлагает два предопределенных типа структур вместе со средствами для описания более общих структур:

Тип 1

Симметричный блок диагонали структура. Это соответствует матричным переменным вида

X=(D1000D2000Dr)

где каждый диагональный блок Dj квадратная и либо нуль, либо полная симметричная матрица, либо скаляр матрица

Dj = d × I , dR

Этот тип охватывает обыкновенные симметричные матрицы (один блок) и скалярные переменные (один блок размера один).

Тип 2

Прямоугольная структура. Это соответствует произвольным прямоугольным матрицам без какой-либо конкретной структуры.

Тип 3

Общие структуры. Этот третий тип используется для описания более сложных структур и/или корреляций между матричными переменными. Принцип следующий: каждая запись X задается независимо как 0, xn , или -xn, где xn обозначает n-ю переменную решения в задаче. Для получения дополнительной информации о том, как использовать Тип 3, смотрите Структурированные Матричные Переменные, а также lmivar запись на страницах с описанием.

В Specify LMI System матричные переменные X и S имеют тип 1. Действительно, оба являются симметричными, и S наследует блок-диагональную структуру D. В частности, S имеет вид

S=(s10000s10000s2s300s3s4).

Инициализируйте описание и объявите эти две матричные переменные.

setlmis([])
lmivar(1,[6 1]);     % X 
lmivar(1,[2 0;2 1]); % S

В обоих lmivar команды, первый вход задает тип структуры, а второй вход содержит дополнительную информацию о структуре переменной:

  • Для матричной переменной X типа 1 этот второй вход является матрицей с двумя столбцами и таким же количеством строк, как диагональ блоки в X. В первом столбце перечислены размеры диагональных блоков, а во втором столбце указывается их характер с помощью следующего соглашения:

    1: полный симметричный блок

    0: скалярный блок

    -1: нуль блока

    Во второй команде, например, [2 0;2 1] означает, что S имеет два диагональных блока, первый из которых является скалярным блоком 2 на 2, а второй - полным блоком 2 на 2.

  • Для матричных переменных типа 2, второй вход lmivar - вектор с двумя входами, в котором перечислены размерности строка и столбец переменной. Для образца прямоугольная переменная матрица 3 на 5 будет задана как

    lmivar(2,[3 5])
    

Для удобства, lmivar также возвращает «тег», который идентифицирует матричную переменную для последующей ссылки. Например, X и S в Specify LMI System могут быть определены как

X = lmivar(1,[6 1]); 
S = lmivar(1,[2 0;2 1]);

Идентификаторы X и S являются целыми числами, соответствующими ранжированию X и S в списке матричных переменных (в порядке объявления). Здесь их значения были бы X=1 и S=2. Обратите внимание, что эти идентификаторы все еще указывают на X и S после удаления или создания экземпляров некоторых матричных переменных. Наконец, lmivar может также вернуть общее количество переменных принятия решений, назначенных до настоящего времени, а также входную зависимость матричной переменной от этих переменных принятия решений (см. lmivar запись на страницах с описанием для получения дополнительной информации).

Определение отдельных LMI

После объявления матричных переменных с lmivar, нам осталось указать содержимое термина для каждого LMI. Напомним, что термины LMI делятся на три категории:

  • Постоянные условия, т.е. фиксированные матрицы, такие как I в левой части LMI S > I.

  • Переменные условия, т.е. условия с матричной переменной. Для образца, ATX и CTSC в выражении:

    (ATX+XA+CTSCXBBTXS)<0

    Переменные условия имеют вид PXQ, где X - переменная, и P, Q - заданные матрицы, называемые левым и правым коэффициентами, соответственно.

  • Внешние факторы.

При описании термина содержимого LMI задайте только термины в блоках на или выше диагонали. Внутренние факторы являются симметричными, этого достаточно, чтобы задать весь LMI. Определение всех блоков приводит к дублированию недиагональных терминов, следовательно, к созданию другого LMI. Кроме того, можно описать блоки на или ниже диагонали.

Условия LMI задаются по одному с lmiterm. Например, LMI

(ATX+XA+CTSCXBBTXS)<0

описывается как

lmiterm([1 1 1 1],1,A,'s'); 
lmiterm([1 1 1 2],C',C); 
lmiterm([1 1 2 1],1,B); 
lmiterm([1 2 2 2],-1,1);

Эти команды последовательно объявляют условия ATX + XA, CTSC, XB и -S. В каждой команде первый аргумент является вектором с четырьмя входами, в котором перечисляются терминологические характеристики следующим образом:

  • Первая запись указывает, к какому LMI принадлежит термин. Значение m означает «левая сторона m-го LMI» и − m означает «правая сторона m-го LMI».

  • Вторая и третья записи идентифицируют блок, которому принадлежит термин. Для образца вектор [1 1 2 1] указывает, что термин присоединен к блоку (1, 2).

  • Последняя запись указывает, какая матричная переменная участвует в термине. Эта запись 0 для постоянных членов, k для членов с k-й матричной переменной X k и − k для условий, связанных с XkT (здесь X и S являются первой и второй переменными в порядке объявления).

Наконец, второй и третий аргументы lmiterm содержите числовые данные (значения постоянного термина, внешнего фактора, или матричных коэффициентов P и Q для переменного <reservedrangesplaceholder3> <reservedrangesplaceholder2> <reservedrangesplaceholder1> условий или PXTQ). Эти аргументы должны ссылаться на существующий MATLAB® переменные и быть реальным. Смотрите Комплексные LMI для спецификации LMI с комплексными коэффициентами.

Для упрощения спецификаций терминов предусмотрена некоторая краткость. Во-первых, блоки по умолчанию равны нулю. Во-вторых, в диагональных блоках дополнительный аргумент 's' позволяет вам задать сопряженное выражение AXB + BTXTAT с одной lmiterm команда. Для образца первая команда задает ATX + XA как «симметризация» XA. Наконец, скалярные значения допускаются как краткие для скалярных матриц, то есть матриц вида αI с α скаляром. Таким образом, постоянный член вида αI может быть задан как «скаляр» α. Это также относится к коэффициентам P и Q переменных членов. Размерности скалярных матриц выводятся из контекста и по умолчанию устанавливаются на 1. Например, третий LMI S > I в Задайте Матричные Переменные Структуры описывается как

lmiterm([-3 1 1 2],1,1);      % 1*S*1 = S 
lmiterm([3 1 1 0],1);         % 1*I = I

Напомним, что по соглашению S рассматривается как правая сторона неравенства, что обосновывает значение -3 в первой команде.

Наконец, для улучшения читаемости часто удобно присоединять идентификатор (тег) к каждой LMI и матричной переменной. Идентификаторы переменных возвращаются lmivar и идентификаторы LMI устанавливаются функцией newlmi. Эти идентификаторы могут использоваться в lmiterm команды для обращения к определенной LMI или матричной переменной. Для системы LMI Specify LMI System это будет выглядеть следующим образом:

setlmis([]) 
X = lmivar(1,[6 1]); 
S = lmivar(1,[2 0;2 1]);

BRL = newlmi; 
lmiterm([BRL 1 1 X],1,A,'s'); 
lmiterm([BRL 1 1 S],C',C);
lmiterm([BRL 1 2 X],1,B); 
lmiterm([BRL 2 2 S],-1,1);

Xpos = newlmi; 
lmiterm([-Xpos 1 1 X],1,1);

Slmi = newlmi;
lmiterm([-Slmi 1 1 S],1,1);
lmiterm([Slmi 1 1 0],1);

Когда система LMI будет полностью задана, получите внутреннее представление задачи.

LMISYS = getlmis;

Это возвращает внутреннее представление LMISYS системы LMI. Это описание проблемы MATLAB может быть передано в другие функции LMI-Lab для последующей обработки. Команда getlmis должен использоваться только один раз и после объявления всех матричных переменных и членов LMI.

Вот идентификаторы X и S указать на переменные X и S, в то время как теги BRL, Xpos, и Slmi указать на первый, второй и третий LMI соответственно. Обратите внимание, что - Xpos относится к правой стороне второго LMI. Точно так же - X указывает на транспонирование переменной X.

См. также

| | |

Похожие примеры

Подробнее о