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

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

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

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

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

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

mdl = 'scdskyhogg';
open_system(mdl)
io = getlinio(mdl);
op = operpoint(mdl);

Линеаризация модели по вызову linearize Несколько раз

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

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

open_system('scdskyhogg/Vehicle System Model/Avionics/Autopilot')
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 и линеаризируйте модель 20 времени.

t = cputime;
for ct = 20:-1:1
    k1 = 1+(ct-10)/100;
    k2 = 1+(ct-10)/100;
    sys_forloop(:,:,ct) = linearize(mdl,op,io);
end

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

dt_for = cputime - t
dt_for =

   51.8000

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

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

Чтобы передать значения параметров в linearize, задайте названия и значения параметра с помощью структуры.

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

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 =

   11.6200

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

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

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

Вычислите полученный коэффициент улучшения времени.

ratio = dt_for/dt_params
ratio =

    4.4578

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

bdclose(mdl)