exponenta event banner

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

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

Как нарушения непрерывности могут скрыть проблемы надежности

Рассмотрим систему пружина-масса-демпфер со 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 с суммой a 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] Бармиш, Б. Р., Харгонекар, П. П., Ши, З.С. и Р. Темпо, «Запас надежности не обязательно должен быть непрерывной функцией проблемных данных», Systems & Control Letters, Vol. 15, No. 2, 1990, pp. 91-98.

[2] Packard, A. и P. Pandey, «Свойства непрерывности вещественного/комплексного структурированного сингулярного значения», том 38, № 3, 1993, стр. 415-428.

См. также

| |

Связанные примеры

Подробнее