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

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

Уменьшение время линеаризации, вы передаете переменные значения параметров функции 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)