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