Более эффективная пакетная линеаризация, варьирующаяся параметры

В этом примере показано, как ускорить пакетную линеаризацию модели, когда набор параметров модели варьируется.

Чтобы уменьшить время линеаризации для такой модели, можно передать различные значения параметров linearize функция. linearize старается не перекомпилировать модель, когда варьировавшиеся параметры являются настраиваемыми параметрами. Лучшие улучшения в полное время линеаризации для моделей с временами обновления большой модели.

Модель объекта управления

В этом примере вы линеаризуете легкую модель самолета. Для получения дополнительной информации об этой модели см. Легкий Проект Самолета (Aerospace Blockset). Используя эту модель требует программного обеспечения Aerospace Blockset™.

Откройте модель.

mdl = 'scdskyhogg';
open_system(mdl)

Извлеките вводы и выводы линеаризации из модели.

io = getlinio(mdl);

Извлеките начальную рабочую точку модели.

op = operpoint(mdl);

Линеаризуйте модель путем вызова linearize Многократно

В данном примере вы изменяете усиления высоты и передаете контроллеры в системе автопилота +/-10%.

Откройте подсистему автопилота.

open_system('scdskyhogg/Vehicle System Model/Avionics/Autopilot')

Инициализируйте усиления контроллеров, чтобы меняться в зависимости от переменных k1 рабочей области MATLAB® и k2.

blks = {'scdskyhogg/Vehicle System Model/Avionics/Autopilot/Alt Controller';...
        'scdskyhogg/Vehicle System Model/Avionics/Autopilot/Theta Controller'};
set_param(blks{1},'Gain','0.0337283240400683*k1')
set_param(blks{2},'Gain','-261.8699347622*k2')

Задайте различные значения для k1 и k2.

ct = 1:20;
k1val = 1+(ct-10)/100;
k2val = 1+(ct-10)/100;

Линеаризуйте модель для заданных значений k1 и k2 путем вызова linearize функционируйте 20 раз.

t = cputime;
for i=1:20
    k1 = k1val(i);
    k2 = k2val(i);
    sys_forloop(:,:,i) = linearize(mdl,op,io);
end

Просмотрите общее время в секундах, чтобы вычислить эти 20 линеаризации.

dt_for = cputime - t
dt_for =

   88.2400

Фактором, который влияет на этот раз, является общее время, которое требуется, чтобы скомпилировать и оценить маски блока и разрешить параметры рабочей области. Чтобы идентифицировать узкие места в вашей компиляции модели, используйте профилировщика MATLAB.

Линеаризуйте модель путем передачи значений параметров linearize

Вместо того, чтобы вызвать linearize отдельно для каждой комбинации значений параметров, можно передать значения параметров linearize в одном вызове функции.

Задайте значения параметров в структуре путем определения имени переменных рабочего пространства MATLAB и массивов значения.

params(1).Name = 'k1';
params(1).Value = k1val;
params(2).Name = 'k2';
params(2).Value = k2val;

Линеаризуйте модель.

t = cputime;
sys_params = linearize(mdl,op,io,params);

Просмотрите общее время, чтобы вычислить эти 20 линеаризации с одним вызовом linearize функция. В этом случае программное обеспечение компилирует модель однажды при варьировании заданных параметров.

dt_params = cputime - t
dt_params =

   15.6000

Сравните результаты

В этом примере различные параметры не влияют на рабочую точку модели Simulink. Линеаризация с помощью обоих подходов эквивалентна.

bode(sys_forloop(:,:,1),sys_params(:,:,1))
legend('Linearization in FOR loop','Linearization using parameter structure')

Вычислите получившееся отношение улучшения времени.

ratio = dt_for/dt_params
ratio =

    5.6564

Закройте модель.

bdclose(mdl)

Смотрите также

| |

Похожие темы