В этом примере показано, как ускорить пакетную линеаризацию модели, когда набор параметров модели варьируется.
Уменьшение время линеаризации, вы передаете различные значения параметров linearize
функция. linearize
старается не перекомпилировать модель, когда варьировавшиеся параметры являются настраиваемыми параметрами. Лучшие улучшения в полное время линеаризации для моделей с временами обновления большой модели. Чтобы запустить этот пример, вам нужно программное обеспечение Aerospace Blockset™.
В этом примере вы линеаризуете легкую модель самолета. Для получения дополнительной информации об этой модели см. Легкий Проект Самолета (Aerospace Blockset).
Откройте модель.
mdl = 'scdskyhogg';
open_system(mdl)
io = getlinio(mdl);
op = operpoint(mdl);
linearize
МногократноВ данном примере вы изменяете усиления высоты и передаете контроллеры +/-10%.
Инициализируйте усиления контроллеров, чтобы меняться в зависимости от переменных k1
рабочей области MATLAB® и
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
\times.
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)