Этот пример иллюстрирует подводные камни использования частотной сетки для вычисления полей робастности для систем с только реальными неопределенными параметрами. Он представляет более безопасный подход наряду со способами уменьшения разрывов в структурированном сингулярном значении .
Рассмотрим систему пружина-масса-демпфер с 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);
stabmarg
stabmarg = 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
с суммой ureal
и ultidyn
. Приведенный выше анализ может быть повторен с помощью complexify
получение одинаковых результатов.
sysreg = complexify(sys,0.05,'ultidyn');
[stabmarg,~,info] = robstab(sysreg,OmegaDense);
stabmarg
stabmarg = struct with fields:
LowerBound: 1.0026
UpperBound: 1.0056
CriticalFrequency: 0.9885
Обратите внимание, что такая регуляризация необходима только при использовании частотной сетки. Применение robstab
непосредственно к исходной неопределенной модели sys
приводит к правильному запасу без частотной сетки или необходимости регуляризации.
Непрерывность устойчивого запаса устойчивости и последующие вычислительные и интерпретационные трудности, вызванные наличием разрывов, рассмотрены в [1]. Последствия и интерпретации регуляризации, проиллюстрированные в этом небольшом примере, описаны в [2]. Обширный анализ регуляризации для 2-параметрического примера приведен в [2].
[1] Barmish, B.R., Khargonekar, P.P, Shi, Z.C., and R. Tempo, «Robustness margin need be a continuous function of the problem data», Systems & Control Leters, Vol. 15, no. 2, 1990, p. 91-98.
[2] Packard, A. and P. Pandey, «Continuity properties of the real/complex structured сингулярное значение», Vol. 38, No 3, 1993, pp. 415-428.
diskmargin
| robstab
| wcdiskmargin