В этом примере показано, как использовать блоки 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');