Этот пример показывает, как ускорить пакетную линеаризацию модели, когда набор параметров модели отличается.
Уменьшение время линеаризации, вы передаете переменные значения параметров функции linearize
. linearize
старается не перекомпилировать модель, когда отличавшиеся параметры являются настраиваемыми параметрами. Лучшие улучшения в полное время линеаризации для моделей с временами обновления большой модели. Чтобы запустить этот пример, вам нужно программное обеспечение Aerospace Blockset™.
В этом примере вы линеаризуете легкую модель самолета. Для получения дополнительной информации об этой модели см. Легкий Проект Самолета (Aerospace Blockset).
Откройте модель.
mdl = 'scdskyhogg';
open_system(mdl)
io = getlinio(mdl);
op = operpoint(mdl);
linearize
многократноВ данном примере вы отличаетесь усиления высоты и передаете контроллеры +/-10%.
Инициализируйте усиления контроллеров, чтобы меняться в зависимости от переменных k1
и k2
рабочей области MATLAB®.
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 = 48.4700
Фактором, который влияет на этот раз, является общее время, которое требуется, чтобы скомпилировать и оценить маски блока и разрешить параметры рабочей области. Чтобы идентифицировать узкие места в вашей образцовой компиляции, используйте профилировщика 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 = 10.0700
В этом примере переменные параметры не влияют на рабочую точку модели Simulink. Линеаризация с помощью обоих подходов эквивалентна.
bode(sys_forloop(:,:,1),sys_params(:,:,1)) legend('Linearization in FOR loop','Linearization using parameter structure')
Вычислите получившееся отношение улучшения времени.
ratio = dt_for/dt_params
ratio = 4.8133
Закройте модель.
bdclose(mdl)