Этот пример показывает, как использовать блоки Simulink ® и вспомогательные функции, предоставленные Robust Control Toolbox™, для определения и анализа неопределенных систем в Simulink и как использовать эти инструменты для выполнения симуляций Монте-Карло неопределенных систем.
Модель Simulink usim_model
состоит из неопределенного объекта в обратной связи с датчиком:
open_system('usim_model')
Объект является моделью первого порядка с двумя источниками неопределенности:
Действительный полюс, положение которого варьируется от -10 до -4
Неизмененная динамика, которая составляет 25% относительной неопределенности на низкой частоте, растущей до 100% неопределенности на уровне 130 рад/с.
Путь обратной связи имеет дешевый датчик, который моделируется фильтром первого порядка со скоростью 20 рад/с и неопределенным усилением в диапазоне от 0,1 до 2. Чтобы задать эти неопределенные переменные, введите
% First-order plant model unc_pole = ureal('unc_pole',-5,'Range',[-10 -4]); plant = ss(unc_pole,5,1,1); % Unmodeled plant dynamics input_unc = ultidyn('input_unc',[1 1]); wt = makeweight(0.25,130,2.5); % Sensor gain sensor_gain = ureal('sensor_gain',1,'Range',[0.1 2]);
The RCTblocks
библиотека содержит блоки для моделирования и анализа эффектов неопределенности в Simulink. Чтобы открыть библиотеку, введите
open('RCTblocks')
The Uncertain State Space
позволяет задавать неопределенные линейные системы (объекты USS). usim_model
содержит три таких блоков, которые подсвечены синим цветом. Диалоговое окно блока «Plant» появляется ниже.
В этом диалоговом окне,
Параметр «Неопределенная переменная» задает неопределенную модель объекта управления (модель первого порядка с неопределенным полюсом unc_pole
).
Параметр «Неопределенность» задает значения для неопределенных переменных блока (unc_pole
в данном случае).
uval
- структура, имена и значения которой являются неопределенными именами переменных и значениями, используемыми для симуляции. Можно задать uval
на []
использовать номинальные значения для неопределенных переменных или варьироваться uval
чтобы анализировать, как неопределенность влияет на ответы модели.
The MultiPlot Graph
блок является удобным способом визуализации распространения отклика, когда вы варьируете неопределенность. Этот блок накладывает результаты симуляции, полученные для каждого значения неопределенности.
Чтобы легко управлять значением неопределенности, используемым для симуляции, usim_model
использует то же «Неопределенность значения» uval
во всех трех Uncertain State Space
блоки. Настройка uval
на []
моделирует реакцию с обратной связью для номинальных значений unc_pole
, input_unc
, и sensor_gain
:
uval = []; % use nominal value of uncertain variables sim('usim_model',10); % simulate response
Чтобы проанализировать, как неопределенность влияет на ответы модели, можно использовать ufind
и usample
команды для генерации случайных значений unc_pole
, input_unc
, и sensor_gain
. Первое использование ufind
чтобы найти Uncertain State Space
блоки в usim_model
и составьте список всех неопределенных переменных в этих блоках:
[uvars,pathinfo] = ufind('usim_model'); uvars % uncertain variables
uvars = struct with fields: input_unc: [1x1 ultidyn] sensor_gain: [1x1 ureal] unc_pole: [1x1 ureal]
pathinfo(:,1) % paths to USS blocks
ans = 3x1 cell array {'usim_model/Plant' } {'usim_model/Sensor Gain' } {'usim_model/Unmodeled Plant Dynamics'}
Затем используйте usample
чтобы сгенерировать значения неопределенности uval
соответствует заданным областям значений неопределенности. Для примера можно симулировать ответ с обратной связью для 10 случайных значений unc_pole
, input_unc
, и sensor_gain
следующим образом:
for i=1:10; uval = usample(uvars); % generate random instance of uncertain variables sim('usim_model',10); % simulate response end
The MultiPlot Graph
Теперь окно показывает 10 возможных реакций цикла неопределенной обратной связи. Обратите внимание, что каждый uval
образец является структурой, содержащей значения неопределенных переменных input_unc
, sensor_gain
, и unc_pole
:
uval % sample value of uncertain variables
uval = struct with fields: input_unc: [1x1 ss] sensor_gain: 0.5893 unc_pole: -4.9557
При необходимости можно сконфигурировать модель, чтобы использовать другое значение неопределенности uval
для каждой новой симуляции. Для этого добавьте uvars
к Базовому рабочему пространству или Рабочему пространству модели и прикрепить usample
вызов модели InitFcn:
bdclose('usim_model'), open_system('usim_model') % Write the uncertain variable list in the Base Workspace evalin('base','uvars=ufind(''usim_model'');') % Modify the model InitFcn set_param('usim_model','InitFcn','uval = usample(uvars);'); % Simulate ten times (same as pressing "Start simulation" ten times) for i=1:10; sim('usim_model',10); end % Clean up set_param('usim_model','InitFcn','');
Снова, MultiPlot Graph
окно показывает 10 возможных ответов цикла неопределенной обратной связи.
Если у вас есть Simulink Control Design™, можно использовать тот же рабочий процесс для линеаризации и анализа неопределенных систем в частотный диапазон. Для примера можно построить график обратной связи Bode для 10 случайных выборок неопределенности модели:
clear sys wmax = 50; % max natural frequency for unmodeled dynamics (input_unc) for i=1:10; uval = usample(uvars,1,wmax); sys(:,:,i) = linearize('usim_model'); end bode(sys) title('Ten linearizations of usim\_model');
Если рабочая точка независима от неопределенных переменных, более быстрый подход состоит в том, чтобы вычислить неопределенную линеаризацию (объект USS) за один снимок с помощью ulinearize
команда:
usys = ulinearize('usim_model')
usys = Uncertain continuous-time state-space model with 1 outputs, 1 inputs, 3 states. The model uncertainty consists of the following blocks: input_unc: Uncertain 1x1 LTI, peak gain = 1, 1 occurrences sensor_gain: Uncertain real, nominal = 1, range = [0.1,2], 1 occurrences unc_pole: Uncertain real, nominal = -5, range = [-10,-4], 1 occurrences Type "usys.NominalValue" to see the nominal value, "get(usys)" to see all properties, and "usys.Uncertainty" to interact with the uncertain elements.
Затем можно выборить модель неопределенного пространства состояний usys
чтобы сгенерировать аналогичную диаграмму Боде:
bode(usample(usys,10,wmax))
title('Ten linearizations of usim\_model');