Параметры блоков сконфигурируйте Simulink® моделировать несколькими способами. Для примера можно использовать блочные параметры, чтобы задать различные коэффициенты или шаги расчета контроллера. Можно также использовать дискретный параметр, как вход управления в блок Multiport Switch, чтобы управлять путем данных в модели. Изменение значения параметра помогает вам понять его влияние на поведение модели. Кроме того, можно варьировать параметры модели объекта управления в системе управления, чтобы изучить робастность контроллера к изменениям объекта.
При обрезке модели используя findop
можно задать набор значений параметров, для которых необходимо обрезать модель. Полное множество значений называется parameter grid или parameter samples. findop
вычисляет рабочую точку для каждой комбинации значений в сетке параметров. Можно варьировать несколько параметров, таким образом расширяя размерность сетки параметра.
Можно варьировать любой параметр модели со значением, заданным переменной в рабочем пространстве модели, MATLAB® рабочая область или словарь данных. В случаях, когда меняющиеся параметры все настраиваются, findop
требуется только одна компиляция модели для поиска рабочих точек для изменения значений параметров. Эта эффективность особенно выгодна для моделей, которые дорого скомпилироваться неоднократно.
Чтобы изменить значение одного параметра для обрезки партии с findop
, задайте сетку параметра как структуру, имеющую два поля. The Name
поле содержит имя переменной рабочей области, которая задает параметр. The Value
поле содержит вектор значений для этого параметра, которые берутся во время обрезки.
Для примера, Watertank
модель имеет три параметра, заданные как переменные рабочего пространства MATLAB, a
, b
, и A
. Следующие команды задают сетку параметра для одинарного параметра A
.
param.Name = 'A';
param.Value = Avals;
Здесь, Avals
- массив, задающий значения выборок для A
.
В следующей таблице перечислены некоторые общие способы определения выборок параметров.
Тип образца параметра в пространстве | Как задать выборки параметров |
---|---|
Линейно изменяющиеся | param.Value = linspace(A_min,A_max,num_samples) |
Логарифмически изменяющиеся | param.Value = logspace(A_min,A_max,num_samples) |
Случайный | param.Value = rand(1,num_samples) |
Обычай | param.Value = custom_vector |
Если переменная, используемая моделью, не является скалярной переменной, задайте имя параметра как выражение, которое разрешается до числового скалярного значения. Например, предположим, что Kpid
является вектором коэффициентов ПИД. Первая запись в этом векторе, Kpid
, используется как значение усиления в блоке в вашей модели. Используйте следующие команды, чтобы изменить этот коэффициент усиления с помощью значений, заданных в векторе Kpvals
:
param.Name = 'Kpid(1)';
param.Value = Kpvals;
После создания структуры param
, передайте его в findop
как param
входной параметр.
Когда вы варьируете больше чем один параметр за раз, вы генерируете сетки параметров более высокой размерности. Для примера, изменение двух параметров приводит к матрице параметров, а изменение трех параметров приводит к 3-D сетке параметров. Примите во внимание следующую сетку параметров, используемую для обрезки партии:
Здесь вы варьируете значения трех параметров, a, b и c. Эти выборки образуют сетку 3 на 4 на 5. op
- массив с теми же размерностями, который содержит соответствующие обрезанные объекты рабочих точек.
Чтобы изменить значение нескольких параметров для обрезки партии с findop
, задайте выборки параметров как массив структур. Структура имеет запись для каждого параметра, значение которого вы варьируете. Структура для каждого параметра такая же, как описано в Vary Single Parameter. Можно задать Value
поле для параметра как массива любой размерности. Однако размер Value
поле должно совпадать со всеми параметрами. Соответствующие записи массива для всех параметров, также называемые parameter grid points, должны сопоставляться с заданной комбинацией параметров. Когда программа обрезает модель, она вычисляет рабочую точку для каждой точки сетки.
Предположим, что ваша модель имеет два параметра, значения которых вы хотите варьировать, a и b:
Вы хотите обрезать модель для каждой комбинации a и b, также называемой full grid:
Создайте прямоугольную сетку параметра с помощью ndgrid
.
a1 = 1; a2 = 2; a = [a1 a2]; b1 = 3; b2 = 4; b = [b1 b2]; [A,B] = ndgrid(a,b)
>> A A = 1 1 2 2 >> B B = 3 4 3 4
Создайте массив структур, params
, который задает сетку параметра.
params(1).Name = 'a'; params(1).Value = A; params(2).Name = 'b'; params(2).Value = B;
В целом, чтобы задать полную сетку для параметров N, используйте ndgrid
для получения N массивов сетки.
[P1,...,PN] = ndgrid(p1,...,pN);
Здесь, p1
..., pN
являются параметрами выборочных векторов.
Создайте массив структур N 1 x.
params(1).Name = 'p1'; params(1).Value = P1; ... params(N).Name = 'pN'; params(N).Value = PN;
Если ваша модель сложная, или вы варьируете значение многих параметров, обрезка модели для полной сетки может стать дорогой. В этом случае можно задать подмножество полной сетки с помощью табличного подхода. Используя пример в «Задать полную сетку», предположим, что вы хотите обрезать модель для следующих комбинаций a и b:
Создайте массив структур, params
, который задает сетку этого параметра.
A = [a1 a1]; params(1).Name = 'a'; params(1).Value = A; B = [b1 b2]; params(2).Name = 'b'; params(2).Value = B;
Этот пример показывает, как получить несколько рабочих точек для модели путем изменения значений параметров. Можно изучить робастность контроллера для изменения объекта путем пакетной линеаризации модели с помощью обрезанных рабочих точек.
Откройте модель Simulink.
sys = 'watertank';
open_system(sys)
Варьируйте параметры A
и b
в пределах 10% от их номинальных значений. Задайте три значения для A
и четыре значения для b
, создание сетки значений 3 на 4 для каждого параметра.
[A_grid,b_grid] = ndgrid(linspace(0.9*A,1.1*A,3),...
linspace(0.9*b,1.1*b,4));
Создайте массив структур параметров, задав имя и точки сетки для каждого параметра.
params(1).Name = 'A'; params(1).Value = A_grid; params(2).Name = 'b'; params(2).Value = b_grid;
Создайте спецификацию рабочей точки по умолчанию для модели, которая задает, что оба состояния модели неизвестны и должны быть в установившемся состоянии в обрезанной рабочей точке.
opspec = operspec(sys)
Operating point specification for the Model watertank. (Time-Varying Components Evaluated at time t=0) States: ---------- (1.) watertank/PID Controller/Integrator/Continuous/Integrator spec: dx = 0, initial guess: 0 (2.) watertank/Water-Tank System/H spec: dx = 0, initial guess: 1 Inputs: None ---------- Outputs: None ----------
По умолчанию findop
отображает отчет о поиске рабочей точки в Командном окне для каждой операции обрезки. Чтобы подавить отображение отчета, создайте набор опций обрезки и отключите отображение отчета о поиске рабочей точки.
opt = findopOptions('DisplayReport','off');
Обрезайте модель с помощью заданной спецификации рабочей точки, сетки параметров и набора опций.
[op,opreport] = findop(sys,opspec,params,opt);
findop
обрезает модель для каждой комбинации параметров. Программное обеспечение использует только одну компиляцию модели. op
- массив объектов рабочих точек 3 на 4, которые соответствуют заданным параметрическим узлам сетки.
Просмотрите рабочую точку в первой строке и первом столбце op
.
op(1,1)
Operating point for the Model watertank. (Time-Varying Components Evaluated at time t=0) States: ---------- (1.) watertank/PID Controller/Integrator/Continuous/Integrator x: 1.41 (2.) watertank/Water-Tank System/H x: 10 Inputs: None ----------
Этот пример показывает, как пакетно обрезать модель, когда заданные изменения параметра влияют на известные состояния для обрезки.
В примере Модель обрезки пакета для изменений параметра, модель обрезается, чтобы соответствовать одной спецификации рабочей точки, которая содержит неизвестные состояния. В других случаях состояния модели известны для обрезки, но зависят от значений меняющихся параметров. В этом случае вы не можете пакетно обрезать модель с помощью одной спецификации рабочей точки. Необходимо создать отдельную спецификацию для каждой точки сетки значения параметров.
Откройте модель Simulink.
sys = 'scdairframeTRIM';
open_system(sys)
В этой модели аэродинамические силы и моменты зависят от скорости,, и частоты,.
Измените параметры и и создайте сетку параметров 6 на 4.
nA = 6; % number of alpha values nV = 4; % number of V values alphaRange = linspace(-20,20,nA)*pi/180; vRange = linspace(700,1400,nV); [alphaGrid,vGrid] = ndgrid(alphaRange,vRange);
Поскольку некоторые известные значения состояний для обрезки зависят от значений и, необходимо создать отдельный объект спецификации рабочей точки для каждой комбинации параметров.
for i = 1:nA for j = 1:nV % Set parameter values in model. alpha_ini = alphaGrid(i,j); v_ini = vGrid(i,j); % Create default specifications based on the specified parameters. opspec(i,j) = operspec(sys); % Specify which states are known and which states are at steady state. opspec(i,j).States(1).Known = [1;1]; opspec(i,j).States(1).SteadyState = [0;0]; opspec(i,j).States(3).Known = [1;1]; opspec(i,j).States(3).SteadyState = [0;1]; opspec(i,j).States(2).Known = 1; opspec(i,j).States(2).SteadyState = 0; opspec(i,j).States(4).Known = 0; opspec(i,j).States(4).SteadyState = 1; end end
Создайте структуру параметра для обрезки партии. Задайте имя и значение сетки для каждого параметра.
params(1).Name = 'alpha_ini'; params(1).Value = alphaGrid; params(2).Name = 'v_ini'; params(2).Value = vGrid;
Обрезайте модель с помощью заданных спецификаций сетки параметров и рабочих точек. Когда вы задаете массив спецификаций рабочих точек и меняющихся значений параметров, размерности массива спецификаций должны совпадать с размерностями сетки параметра.
opt = findopOptions('DisplayReport','off'); op = findop(sys,opspec,params,opt);
findop
обрезает модель для каждой комбинации параметров. op
является массивом объектов рабочих точек 6 на 4, которые соответствуют заданным параметрическим узлам сетки.