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

Этот пример иллюстрирует подводные камни использования частотной сетки для вычисления полей робастности для систем с только реальными неопределенными параметрами. Он представляет более безопасный подход наряду со способами уменьшения разрывов в структурированном сингулярном значении μ.

Как разрывы могут скрыть проблемы робастности

Рассмотрим систему пружина-масса-демпфер с 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')

Figure contains an axes. The axes with title Robust stability margin: 40 frequency points contains an object of type line.

Обратите внимание, что повышение плотности сетки не поможет. Только путем добавления 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')

Figure contains an axes. The axes with title Robust stability margin: 5% added dynamics, 200 frequency points contains 2 objects of type line. These objects represent 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.

См. также

| |

Похожие примеры

Подробнее о