Этот пример иллюстрирует ловушки использования частоты gridding, чтобы вычислить поля робастности для систем только действительными неопределенными параметрами. Это представляет более безопасный подход наряду со способами смягчить разрывы в структурированном сингулярном значении .
Рассмотрите систему пружинного массового демпфера с 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
. Это использует более усовершенствованный алгоритм, который, как гарантируют, найдет пик даже в присутствии разрыва. Этот подход более точен и часто быстрее, чем частота gridding.
[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: 0.9427
Теперь вычисление с координатной сеткой частотой дает к полю 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
Обратите внимание на то, что такая регуляризация только необходима при использовании частоты gridding. Применение robstab
непосредственно к исходной неопределенной модели sys
дает к правильному полю без частоты gridding или потребности в регуляризации.
Непрерывность устойчивого запаса устойчивости и последующие вычислительные и interpretational трудности, повышенные присутствием разрывов, рассматриваются в [1]. Последствия и интерпретации регуляризации, проиллюстрированной в этом небольшом примере, описаны в [2]. Обширный анализ регуляризации для примера с 2 параметрами дан в [2].
[1] Barmish, B.R., Khargonekar, P.P, Ши, Z.C., и R. Темп, "Поле робастности не должно быть непрерывной функцией проблемных данных", Systems & Control Letters, Издание 15, № 2, 1990, стр 91-98.
[2] Паккард, A. и П. Пэнди, "Свойства непрерывности действительного/комплексного структурированного сингулярного значения", Издание 38, № 3, 1993, стр 415-428.
robstab
| diskmargin
| wcdiskmargin