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