Этот пример показывает, как использовать Robust Control Toolbox™, чтобы аппроксимировать старшие модели объекта управления более простыми, моделями младшего разряда.
Robust Control Toolbox предлагает инструменты, чтобы иметь дело с большими моделями, такими как:
Старшие Объекты: Подробные первые принципы или модели конечного элемента вашего объекта имеют тенденцию иметь старший разряд. Часто мы хотим упростить такие модели в целях системы управления или симуляции.
Старшие Контроллеры: Устойчивые методы управления часто приводят к старшим контроллерам. Это распространено, например, когда мы используем функции взвешивания частоты для формирования ответа разомкнутого цикла. Мы захотим упростить такие контроллеры для реализации.
В целях управления обычно достаточно иметь точную модель около перекрестной частоты. Для симуляции достаточно получить существенную динамику в частотном диапазоне сигналов возбуждения. Это означает, что часто возможно найти аппроксимации младшим порядком старших моделей. Robust Control Toolbox предлагает множество алгоритмов снижения сложности модели, чтобы лучше всего удовлетворить вашим требованиям и вашим образцовым характеристикам.
Задача снижения сложности модели обычно включает следующие шаги:
Анализируйте важные характеристики модели с ее времени или ответов частотного диапазона, полученных из step
или bode
, например.
Определите соответствующий уменьшаемый порядок путем графического вывода сингулярных значений Ганкеля исходной модели (hankelsv
), чтобы определить, какие режимы (состояния) могут быть отброшены, не жертвуя ключевыми характеристиками.
Выберите алгоритм сокращения. Некоторые методы сокращения, доступные в тулбоксе: balancmr
, bstmr
, schurmr
, hankelmr
и ncfmr
Мы можем легко получить доступ к этим алгоритмам через интерфейс reduce
верхнего уровня. Методы используют различные меры "близости" между исходными и упрощенными моделями. Выбор является зависящим от приложения. Давайте будем судить каждого из них, чтобы исследовать их относительные достоинства.
Валидация: Мы подтверждаем наши результаты путем сравнения динамики упрощенной модели к оригиналу. Мы, возможно, должны настроить наши параметры сокращения (выбор порядка модели, алгоритма, ошибочные границы и т.д.), если результаты не являются удовлетворительными.
В этом примере мы применяем методы сокращения к модели создания Университетской клиники Лос-Анджелеса. Модель взята из SLICOT работающее Примечание 2002-2, "Набор примеров сравнительного теста для снижения сложности модели линейных независимых от времени динамических систем", И. Чахлэоуи и П.В. Дуреном. Это имеет восемь этажей, каждого с тремя степенями свободы - два смещения и одно вращение. Мы представляем отношение ввода - вывода для любого из этих смещений с помощью модели с 48 состояниями, где каждое состояние представляет смещение или его скорость изменения (скорость).
Давайте загрузим данные для примера:
load buildingData.mat
Давайте начнем путем анализа частотной характеристики модели:
bode(G)
grid on
Рисунок 1: Диаграмма Боде, чтобы анализировать частотную характеристику
Как наблюдается из частотной характеристики модели, существенные движущие силы системы лежат в частотном диапазоне 3 - 50 радианов/секунда. Значение заглядывает и очень низкому и высокочастотным областям значений. Наша цель состоит в том, чтобы найти модель младшего разряда, которая сохраняет информационное содержимое в этом частотном диапазоне к допустимому уровню точности.
Чтобы понять, какие состояния модели могут быть безопасно отброшены, посмотрите на сингулярные значения Ганкеля модели:
hsv_add = hankelsv(G); bar(hsv_add) title('Hankel Singular Values of the Model (G)'); xlabel('Number of States') ylabel('Singular Values (\sigma_i)') line([10.5 10.5],[0 1.5e-3],'Color','r','linestyle','--','linewidth',1) text(6,1.6e-3,'10 dominant states.')
Рисунок 2: сингулярные значения Ганкеля модели (G).
График сингулярного значения Ганкеля предполагает, что существует четыре доминирующих режима в этой системе. Однако вклад остающихся режимов является все еще значительным. Мы разграничим в 10 состояниях и отбросим остающиеся единицы, чтобы найти упрощенную модель 10-го порядка Gr
, который лучше всего аппроксимирует исходную систему G
.
Функциональный reduce
является шлюзом ко всем стандартным программам снижения сложности модели, доступным в тулбоксе. Мы будем использовать значение по умолчанию, усечение баланса квадратного корня ('balancmr') опция reduce
как первый шаг. Этот метод использует "аддитивную" ошибку, направляющуюся в сокращение, означая, что это пытается сохранить абсолютную ошибку приближения однородно небольшой через частоты.
% Compute 10th-order reduced model (reduce uses balancmr method by default) [Gr_add,info_add] = reduce(G,10); % Now compare the original model G to the reduced model Gr_add bode(G,'b',Gr_add,'r') grid on title('Comparing Original (G) to the Reduced model (Gr\_add)') legend('G - 48-state original ','Gr\_add - 10-state reduced','location','northeast')
Рисунок 3: Сравнение оригинала (G) к упрощенной модели (Gr_add)
Как замечено по диаграмме Боде в рисунке 3, упрощенная модель получает резонансы ниже 30 рад/с вполне хорошо, но соответствие в низкочастотной области (<2 рад/с) плохо. Кроме того, упрощенная модель не полностью получает динамику в частотном диапазоне на 30-50 рад/с. Возможное объяснение больших ошибок в низких частотах является относительно низким усилением модели на этих частотах. Следовательно, даже большие ошибки на этих частотах способствуют мало полной ошибке.
Чтобы обойти эту проблему, мы можем попробовать метод мультипликативной ошибки, такой как bstmr
. Этот алгоритм подчеркивает относительные погрешности, а не абсолютные единицы. Поскольку относительные сравнения не работают, когда усиления близко к нулю, мы должны добавить порог минимального усиления, например, путем добавления проходного усиления D
в нашу исходную модель. Принятие нас не касается ошибок в усилениях ниже-100 дБ, мы можем установить сквозное соединение на 1e-5.
GG = G; GG.D = 1e-5;
Теперь, давайте посмотрим на сингулярные значения для мультипликативных (относительных) ошибок (использующий 'mult' опцию hankelsv
)
hsv_mult = hankelsv(GG,'mult'); bar(hsv_mult) title('Multiplicative-Error Singular Values of the Model (G)'); xlabel('Number of States') ylabel('Singular Values (\sigma_i)')
Рисунок 4: сингулярные значения мультипликативной ошибки модели (G)
Модель 26-го порядка выглядит многообещающей, но ради сравнения с предыдущим результатом, давайте придерживаться 10-го сокращения порядка.
% Use bstmr algorithm option for model reduction [Gr_mult,info_mult] = reduce(GG,10,'algorithm','bst'); %now compare the original model G to the reduced model Gr_mult bode(G,Gr_add,Gr_mult,{1e-2,1e4}), grid on title('Comparing Original (G) to the Reduced models (Gr\_add and Gr\_mult)') legend('G - 48-state original ','Gr\_add (balancmr)','Gr\_mult (bstmr)','location','northeast')
Рисунок 5: Сравнение оригинала (G) к упрощенным моделям (Gr_add и Gr_mult)
Подгонка между оригиналом и упрощенными моделями намного лучше с подходом мультипликативной ошибки, даже в низких частотах. Мы можем подтвердить это путем сравнения переходных процессов:
step(G,Gr_add,Gr_mult,15) %step response until 15 seconds legend('G: 48-state original ','Gr\_add: 10-state (balancmr)','Gr\_mult: 10-state (bstmr)')
Рисунок 6: Переходные процессы этих трех моделей
Все алгоритмы обеспечивают границы при ошибке приближения. Для методов аддитивной ошибки как balancmr
ошибка приближения измеряется пиковым (максимальным) усилением ошибочной модели G-Greduced
через все частоты. Это пиковое усиление также известно как H-норму-бесконечности ошибочной модели. Ошибка, направляющаяся в алгоритмы аддитивной ошибки, похожа:
где сумма по всем отброшенным сингулярным значениям Ганкеля G
(записи 11 - 48 из hsv_add
). Мы можем проверить, что это связало, удовлетворен путем сравнения двух сторон этого неравенства:
norm(G-Gr_add,inf) % actual error
ans = 6.0043e-04
% theoretical bound (stored in the "ErrorBound" field of the "INFO" % struct returned by |reduce|) info_add.ErrorBound
ans = 0.0047
Для методов мультипликативной ошибки, таких как bstmr
, ошибка приближения измеряется пиковым усилением через частоту модели G\(G-Greduced)
относительной погрешности. Связанная ошибка похожа
где сумма по отброшенным мультипликативным сингулярным значениям Ганкеля, вычисленным hankelsv(G,'mult')
. Снова мы можем сравнить эти границы для упрощенной модели Gr_mult
norm(GG\(GG-Gr_mult),inf) % actual error
ans = 0.5949
% Theoretical bound
info_mult.ErrorBound
ans = 473.2954
Постройте относительную погрешность для подтверждения
bodemag(GG\(GG-Gr_mult),{1e-2,1e3}) grid on text(0.1,-50,'Peak Gain: -4.6 dB (59%) at 17.2 rad/s') title('Relative error between original model (G) and reduced model (Gr\_mult)')
Рисунок 7: Относительная погрешность между исходной моделью (G) и упрощенной моделью (Gr_mult)
Из графика относительной погрешности выше, существует 59%-я относительная погрешность в 17,2 рад/с, которые могут быть больше, чем мы готовы принять.
Чтобы улучшить точность Gr_mult
, мы должны будем увеличить порядок. Чтобы достигнуть по крайней мере 5%-й относительной точности, что является самым низкоуровневым, мы можем добраться? Функциональный reduce
может автоматически выбрать модель самую низкоуровневую, совместимую с нашим желаемым уровнем точности.
% Specify a maximum of 5% approximation error [Gred,info] = reduce(GG,'ErrorType','mult','MaxError',0.05); size(Gred)
State-space model with 1 outputs, 1 inputs, and 34 states.
Алгоритм выбрал упрощенную модель с 34 состояниями Gred
. Сравните фактическую ошибку со связанным теоретическим:
norm(GG\(GG-Gred),inf)
ans = 0.0068
info.ErrorBound
ans = 0.0423
Посмотрите на значение относительной погрешности как на функцию частоты. Более высокая точность была достигнута за счет большего порядка модели (от 10 до 34). Обратите внимание на то, что фактическая максимальная погрешность составляет 0,6%, намного меньше, чем 5%-я цель. Это несоответствие является результатом функционального bstmr
с помощью связанной ошибки, а не фактической ошибки выбрать порядок.
bodemag(GG\(GG-Gred),{1,1e3}) grid on text(5,-75,'Peak Gain: -43.3 dB (0.6%) at 73.8 rad/s') title('Relative error between original model (G) and reduced model (Gred)')
Рисунок 8: Относительная погрешность между исходной моделью (G) и упрощенной моделью (Gred)
Сравните Предвещать ответы
bode(G,Gred,{1e-2,1e4}) grid on legend('G - 48-state original','Gred - 34-state reduced')
Рисунок 9: Диаграмма Боде исходной модели с 48 состояниями и упрощенной модели с 34 состояниями
Наконец, сравните переходные процессы исходных и упрощенных моделей. Они фактически неразличимы.
step(G,'b',Gred,'r--',15) %step response until 15 seconds legend('G: 48-state original ','Gred: 34-state (bstmr)') text(5,-4e-4,'Maximum relative error <0.05')
Рисунок 10: Переходный процесс исходной модели с 48 состояниями и упрощенной модели с 34 состояниями