Параметры блоков конфигурируют модель Simulink® несколькими способами. Например, можно использовать параметры блоков, чтобы задать различные коэффициенты или шаги расчета контроллера. Можно также использовать дискретный параметр, как вход управления с блоком Multiport Switch, чтобы управлять информационным каналом в модели. Варьируясь значение параметра помогает вам изучить его удар на поведение модели. Кроме того, можно варьироваться параметры модели объекта управления в системе управления, чтобы изучить робастность контроллера, чтобы посадить изменения.
При обрезке модели с помощью findop
, можно задать набор значений параметров, для которых можно обрезать модель. Полный набор значений называется parameter grid или parameter samples. findop
вычисляет рабочую точку для каждой комбинации значения в сетке параметра. Можно варьироваться несколько параметров, таким образом расширяя размерность сетки параметра.
Можно варьироваться любой параметр модели со значением, данным переменной в рабочем пространстве модели, рабочей области MATLAB® или словаре данных. В случаях, где различные параметры весь настраиваемые (Simulink), findop
требует, чтобы только одна компиляция модели нашла рабочие точки для различных значений параметров. Этот КПД особенно выгоден для моделей, которые являются дорогими, чтобы неоднократно компилировать.
Варьироваться значение одного параметра для обрезки пакета с findop
, задайте сетку параметра как структуру, имеющую два поля. Name
поле содержит имя переменной рабочей области, которая задает параметр. 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
, задайте выборки параметра как массив структур. Структура имеет запись для каждого параметра, значение которого вы варьируетесь. Структура для каждого параметра эквивалентна описанный в, Варьируются Один Параметр. Можно задать 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
демонстрационные векторы параметра.
Создайте 1 x массив структур N.
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 массив объектов рабочей точки, которые соответствуют заданным узлам решетки параметра.