Получение надежных оценок полей робастности

Этот пример иллюстрирует ловушки использования частоты 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.