Этот пример показывает, как использовать блоки 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]);
Библиотека RCTblocks
содержит блоки, чтобы смоделировать и анализировать эффекты неуверенности в Simulink. Чтобы открыть библиотеку, ввести
open('RCTblocks')
Блок Uncertain State Space
позволяет вам задать неопределенные линейные системы (объекты USS). usim_model
содержит три таких блока, которые подсвечены в синем. Диалоговое окно для блока "Plant" появляется ниже.
В этом диалоговом окне,
"Неопределенная системная переменная" параметр задает неопределенную модель объекта управления (модель первого порядка с неопределенным полюсом unc_pole
).
"Параметр" значения неуверенности задает значения для неопределенных переменных блока (unc_pole
в этом случае).
uval
является структурой, имена полей которой и значения являются неопределенными именами переменных и значениями, чтобы использовать для симуляции. Можно установить uval
на []
использовать номинальную стоимость для неопределенных переменных или отличаться uval
, чтобы анализировать, как неуверенность влияет на образцовые ответы.
Блок 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
Окно 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.9495 unc_pole: -5.6164
В случае необходимости можно сконфигурировать модель, чтобы использовать различное значение неуверенности 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™, можно использовать тот же рабочий процесс, чтобы линеаризовать и анализировать неопределенные системы в частотном диапазоне. Например, можно построить с обратной связью, Предвещают ответ для 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');