В этом примере показано, как ускорить пакетную линеаризацию модели, когда набор параметров модели изменяется.
Уменьшите время линеаризации, вы передадите меняющиеся значения параметров в 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)