Этот пример иллюстрирует подводные камни использования частотной сетки для вычисления пределов надежности для систем только с реальными неопределенными параметрами. Он представляет собой более безопасный подход наряду со способами уменьшения разрывов в структурированном сингулярном значении .
Рассмотрим систему пружина-масса-демпфер со 100% неопределенностью параметров в коэффициенте демпфирования и 0% неопределенностью в коэффициенте пружины. Обратите внимание, что вся неопределенность ureal тип.
m = 1; k = 1; c = ureal('c',1,'plusminus',1); sys = tf(1,[m c k]);
Как неопределенный элемент c варьируется, единственное место, где полюса могут мигрировать от стабильного к нестабильному, это при s = j * 1 (1 рад/сек). Отсутствие изменений вc может вызвать их миграцию через ось jw на любой другой частоте. В результате запас устойчивости бесконечен на всех частотах, кроме 1 рад/с, где запас относительно заданной неопределенности равен 1. Другими словами, запас устойчивости и лежащее в его основе структурированное сингулярное значение являются прерывистыми в зависимости от частоты.
Традиционный подход к вычислению запаса устойчивости заключается в выборе частотной сетки и вычислении нижней и верхней границ для в каждой точке частоты. В большинстве случаев запас устойчивости является непрерывным по отношению к частоте, и этот подход дает хорошие оценки при условии, что вы используете достаточно плотную частотную сетку. Однако в проблемах только с ureal неопределенность, такая как в приведенном выше примере, полюса могут мигрировать из стабильных в нестабильные только на определенных частотах (точках разрывов для ), поэтому любая частотная сетка, исключающая эти конкретные частоты, приведет к избыточно оптимистичным запасам устойчивости.
Чтобы увидеть этот эффект, выберите выше частотную сетку для пружинно-массово-демпферной системы и вычислите устойчивые пределы устойчивости в этих частотных точках с помощью robstab.
omega = logspace(-1,1,40); % one possible grid
[stabmarg,wcu,info] = robstab(sys,omega);
stabmargstabmarg = struct with fields:
LowerBound: 5.0348e+03
UpperBound: Inf
CriticalFrequency: 0.1000
Область info.Bounds дает нижнюю и верхнюю границы поля на каждой частоте. Убедитесь, что нижняя граница (гарантированный запас) велика на всех частотах.
loglog(omega,info.Bounds(:,1))
title('Robust stability margin: 40 frequency points')
Обратите внимание, что сделать сетку плотнее не поможет. Только добавив f = 1 в сетку, мы найдем истинное поле.
f = 1; stabmarg = robstab(sys,f)
stabmarg = struct with fields:
LowerBound: 1.0000
UpperBound: 1
CriticalFrequency: 1
Вместо указания частотной сетки примените robstab непосредственно к модели USS sys. При этом используется более совершенный алгоритм, который гарантированно найдет пиковый δ даже при наличии разрывов. Этот подход является более точным и часто более быстрым, чем частотная сетка.
[stabmarg,wcu] = robstab(sys)
stabmarg = struct with fields:
LowerBound: 1.0000
UpperBound: 1.0000
CriticalFrequency: 1.0000
wcu = struct with fields:
c: 2.2204e-16
При этом вычисляется правильный запас устойчивости (1), определяется критическая частота (f=1) и находит наименьшее дестабилизирующее возмущение (установка c=0, как и ожидалось).
Приведенный выше пример показывает, что запас устойчивости может быть прерывистой функцией частоты. Другими словами, он может иметь прыжки. Мы можем устранить такие скачки, добавив небольшое количество неопределенной динамики к каждому неопределенному реальному параметру. Это равносильно добавлению некоторой динамики к чистым прибылям. Важно отметить, что по мере того, как размер добавленной динамики становится равным нулю, предполагаемый запас для измененной задачи сходится к истинному пределу для исходной задачи.
В примере пружинного демпфера мы моделируем c в качестве ureal с диапазоном [0,05,1,95], а не [0,2], и добавить ultidyn возмущение с коэффициентом усиления, ограниченным на 0,05. Эта комбинация охватывает исходную неопределенность в c и вводит только 5% консерватизма.
cc = ureal('cReal',1,'plusminus',0.95) + ultidyn('cUlti',[1 1],'Bound',0.05); sysreg = usubs(sys,'c',cc);
Перерасчет запаса устойчивости по частотной сетке omega.
[stabmarg,~,info] = robstab(sysreg,omega); stabmarg
stabmarg = struct with fields:
LowerBound: 2.3624
UpperBound: 2.3630
CriticalFrequency: 1.0608
Теперь частотно-сетчатый расчет дает запас 2,36. Это все еще больше 1 (истинный запас), поскольку плотность частотных точек недостаточно высока. Увеличьте количество точек с 40 до 200 и повторно вычислите маржу.
OmegaDense = logspace(-1,1,200); [stabmarg,~,info] = robstab(sysreg,OmegaDense); stabmarg
stabmarg = struct with fields:
LowerBound: 1.0026
UpperBound: 1.0056
CriticalFrequency: 0.9885
Постройте график запаса прочности как функции частоты.
loglog(OmegaDense,info.Bounds(:,1),OmegaDense,info.Bounds(:,2)) title('Robust stability margin: 5% added dynamics, 200 frequency points') legend('Lower bound','Upper bound')

Вычисленный запас теперь близок к 1, истинному пределу для исходной задачи. В общем, предел устойчивости модифицированной задачи меньше или равен пределу устойчивости исходной задачи. Если она существенно меньше, то ответ на вопрос «Что такое запас устойчивости?» очень чувствителен к модели неопределенности. В этом случае мы больше верим в ценность, которая позволяет несколько процентов немодированной динамики. В любом случае, запас устойчивости для измененной проблемы более надежен.
Команда complexify автоматизирует процедуру замены ureal с суммой a ureal и ultidyn. Анализ, описанный выше, может быть повторен с использованием complexify получение одинаковых результатов.
sysreg = complexify(sys,0.05,'ultidyn');
[stabmarg,~,info] = robstab(sysreg,OmegaDense);
stabmargstabmarg = struct with fields:
LowerBound: 1.0026
UpperBound: 1.0056
CriticalFrequency: 0.9885
Следует отметить, что такая регуляризация необходима только при использовании частотной сетки. Применение robstab непосредственно к исходной неопределенной модели sys дает правильный запас без частотной сетки или необходимости регуляризации.
Непрерывность запаса устойчивой устойчивости и последующие вычислительные и интерпретационные трудности, вызванные наличием разрывов, рассмотрены в [1]. Последствия и интерпретации регуляризации, проиллюстрированные в этом небольшом примере, описаны в [2]. Обширный анализ регуляризации для 2-параметрического примера приведен в [2].
[1] Бармиш, Б. Р., Харгонекар, П. П., Ши, З.С. и Р. Темпо, «Запас надежности не обязательно должен быть непрерывной функцией проблемных данных», Systems & Control Letters, Vol. 15, No. 2, 1990, pp. 91-98.
[2] Packard, A. и P. Pandey, «Свойства непрерывности вещественного/комплексного структурированного сингулярного значения», том 38, № 3, 1993, стр. 415-428.
diskmargin | robstab | wcdiskmargin