Этот пример иллюстрирует, как ускорить оценку частотной характеристики моделей Simulink ® с помощью параллельных вычислений. В некоторых сценариях frestimate
функция оценивает частотную характеристику модели Simulink путем выполнения нескольких симуляций Simulink. Можно распределить эти симуляции в пул работников MATLAB ® с помощью программного обеспечения Parallel Computing Toolbox™.
Этот пример требует программного обеспечения Parallel Computing Toolbox. Можно опционально запустить симуляции на компьютерный кластер с помощью программного обеспечения MATLAB Parallel Server™. В этом примере используются локальные рабочие функции, доступные в программном обеспечении Parallel Computing Toolbox.
frestimate
Когда вы вычисляете частотную характеристику, используя frestimate
функция, большая часть времени расчета используется в симуляциях Simulink. Чтобы уменьшить общее время симуляции, можно:
Используйте быстрый режим Accelerator. Используйте этот метод при frestimate
выполняет только одну симуляцию Simulink. Для получения примера смотрите Валидацию линеаризации в Частотный диапазон с использованием FRESTIMATE.
Распределите симуляции между работниками в пуле MATLAB. Используйте этот метод при frestimate
выполняет несколько симуляций Simulink. frestimate
Выполняет более одной симуляции Simulink, когда вы задаете следующее:
Входной сигнал синестрима с SimulationOrder
набор параметров установлен в 'OneAtATime'
. В этом случае каждая частота в сигнале синестреама моделируется отдельно.
Линейные точки анализа с более чем один вход точкой или нескаляром входа точкой. В этом случае каждая входная точка линеаризации или каждый канал в нескалярной входной точке линеаризации приводит к отдельной симуляции Simulink.
Использование frestimate
функция с параллельными вычислениями также поддерживает normal, accelerator и rapid режимов Accelerator.
Чтобы использовать параллельные вычисления для ускорения оценки частотной характеристики, сконфигурируйте и запустите пул работников MATLAB перед запуском frestimate
функция.
Чтобы проверить, открыт ли пул MATLAB, используйте gcp
функция. Если пул не открыт, откройте пул с помощью parpool
функция.
if isempty(gcp) parpool local end
Starting parallel pool (parpool) using the 'local' profile ... Connected to the parallel pool (number of workers: 6).
Когда вы используете входной сигнал sinestream со frestimate
и вы устанавливаете SimulationOrder
параметр в 'OneAtATime'
каждая частота в сигнале синестреама моделируется в отдельной симуляции Simulink. Если вы включите опцию параллельных вычислений, симуляции, соответствующие отдельным частотам, распределяются между работниками пула MATLAB.
Откройте модель и получите точки линейного анализа, сохраненные в модели.
mdl = 'scdengine';
open_system(mdl)
io = getlinio(mdl);
Создайте входной сигнал синестрейма с 'OneAtATime'
порядок симуляции.
in = frest.Sinestream('Frequency',logspace(-1,1,50),'Amplitude',1e-3,... 'SimulationOrder','OneAtATime');
В этой модели существует одна входная точка линеаризации и одна выходная точка линеаризации. В сигнале sinestream 50 частоты. The 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)
Parallel pool using the 'local' profile is shutting down.
frestimate
| frestimateOptions
| gcp
(Parallel Computing Toolbox) | parpool
(Parallel Computing Toolbox)