Этот пример иллюстрирует, как ускорить оценку частотной характеристики моделей Simulink® с помощью параллельных вычислений. В некоторых сценариях, frestimate
функционируйте оценивает частотную характеристику модели Simulink путем выполнения нескольких симуляций Simulink. Можно распределить эти симуляции пулу рабочих MATLAB® при помощи программного обеспечения Parallel Computing Toolbox™.
Этот пример требует программного обеспечения Parallel Computing Toolbox. Можно опционально запустить симуляции на компьютерном кластере с помощью программного обеспечения MATLAB Parallel Server™. Этот пример использует локальную функциональность рабочего, доступную в программном обеспечении Parallel Computing Toolbox.
frestimate
Когда вы вычисляете частотную характеристику с помощью frestimate
функция, большинство времени вычисления потрачено в симуляциях Simulink. Чтобы уменьшать общее время симуляции, вы можете:
Используйте быстрый режим Accelerator. Используйте этот метод когда frestimate
выполняет только одну симуляцию Simulink. Для примера смотрите, Подтверждают Линеаризацию в Частотном диапазоне в Командной строке.
Распределите симуляции на рабочих в пуле MATLAB. Используйте этот метод когда frestimate
выполняет несколько симуляций Simulink. frestimate
выполняет больше чем одну симуляцию Simulink, когда вы задаете следующее:
sinestream входной сигнал с SimulationOrder
набор параметров к 'OneAtATime'
. В этом случае каждая частота в сигнале sinestream симулирована отдельно.
Линейный анализ указывает больше чем с одной точкой ввода или нескалярной точкой ввода. В этом случае каждая точка ввода линеаризации или каждый канал в нескалярной точке ввода линеаризации дают к отдельной симуляции Simulink.
Используя frestimate
функция с параллельными вычислениями также поддерживает нормальный, акселератор и быстрые режимы Accelerator.
Чтобы использовать параллельные вычисления, чтобы ускорить оценку частотной характеристики, сконфигурируйте и запустите пул работников MATLAB, прежде чем вы запустите frestimate
функция.
Чтобы проверять, открыт ли пул MATLAB, используйте gcp
функция. Если никакой пул не открыт, откройте тот с помощью parpool
функция.
if isempty(gcp) parpool local end
Когда вы используете sinestream входной сигнал с frestimate
функционируйте и вы устанавливаете SimulationOrder
параметр к 'OneAtATime'
, каждая частота в сигнале sinestream симулирует в отдельной симуляции Simulink. Если вы включаете опцию параллельных вычислений, симуляции, соответствующие отдельным частотам, распределяются среди рабочих в пуле MATLAB.
Откройте модель и получите линейные аналитические точки, сохраненные в модели.
mdl = 'scdengine';
open_system(mdl)
io = getlinio(mdl);
Создайте sinestream входной сигнал с 'OneAtATime'
порядок симуляции.
in = frest.Sinestream('Frequency',logspace(-1,1,50),'Amplitude',1e-3,... 'SimulationOrder','OneAtATime');
В этой модели существует одна точка ввода линеаризации и одна выходная точка линеаризации. В сигнале sinestream существует 50 частот. frestimate
команда выполняет 50 отдельных симуляций Simulink потому что SimulationOrder
параметр устанавливается на 'OneAtATime'
.
Чтобы распределить эти симуляции среди рабочих, включите параллельные вычисления для frestimate
. Создайте frestimateOptions
объект и набор UseParallel
опция к 'on'
. Используйте этот объект в качестве входного параметра для frestimate
.
opt = frestimateOptions('UseParallel','on'); sysest = frestimate(mdl,io,in,opt); bode(sysest,'r*')
В общем случае параллельные вычисления значительно ускоряют оценку частотной характеристики с помощью frestimate
. Фактические времена вычислений и объем улучшения будут зависеть от вашей компьютерной настройки и вашей настройки Parallel Computing Toolbox. Например, объем улучшения может быть затронут различными факторами включая издержки от передачи данных клиента рабочему и соревнования ресурса между процессами ОС и рабочими процессами.
Закройте модель.
bdclose(mdl)
Когда количество точек ввода линеаризации или количество каналов в точке ввода линеаризации больше один, frestimate
команда распределяет отдельные симуляции Simulink, соответствующие этим входным каналам среди рабочих в пуле MATLAB.
Откройте модель и получите линейные аналитические точки, сохраненные в модели.
mdl = 'scdplane'; open_system(mdl) io(1) = linio('scdplane/Sum1',1,'input'); io(2) = linio('scdplane/Actuator Model',1,'input'); io(3) = linio('scdplane/Gain5',1,'output');
С linio
функция, вы задаете две точки ввода линеаризации, которые оба расположены на скалярных Сигналах Simulink. Если при запуске frestimate
команда, чтобы оценить частотную характеристику для этой модели, две симуляции Simulink происходят, один для каждого входа.
Линеаризуйте модель и создайте входной сигнал с помощью результата линеаризации.
sys = linearize(mdl,io); in = frest.Sinestream(sys);
Прежде, чем оценить частотную характеристику, найдите все исходные блоки в путях прохождения сигнала линеаризации выходными параметрами, которые генерируют изменяющиеся во времени сигналы с помощью findSources
функция. Такие изменяющиеся во времени сигналы могут вмешаться в сигнал в выходных точках линеаризации и привести к неточным результатам оценки. Чтобы отключить изменяющиеся во времени исходные блоки, создайте frestimateOptions
набор опции и задает BlocksToHoldConstant
опция.
srcblks = frest.findSources('scdplane',io); opt = frestimateOptions('BlocksToHoldConstant',srcblks);
Включите параллельные вычисления с помощью UseParallel
опция оценки, которая распределяет симуляции среди рабочих.
opt.UseParallel = 'on';
Запустите frestimate
использование параллельных вычислений.
sysest = frestimate(mdl,io,in,opt);
Постройте результат оценки против аналитической линеаризации
bodeopts = bodeoptions; bodeopts.PhaseMatching = 'on'; bodeplot(sys,sysest,'r*',bodeopts);
Закройте модель, открытую фигуру и параллельный пул.
bdclose(mdl) close(gcf) delete(gcp)
frestimate
| frestimateOptions
| parpool
(Parallel Computing Toolbox) | gcp
(Parallel Computing Toolbox)