Симуляция моделей со многими временными шагами и сигналами может включить большие данные, которые являются слишком большими, чтобы поместиться в RAM вашего компьютера. Такие ситуации включают:
Регистрируя данные моделирования (логгирование сигнала, логгирование выходного порта и логгирование состояния)
Загрузка данных о входном сигнале для симуляции модели
Выполнение нескольких или параллельных симуляций
Чтобы работать с большими данными для симуляций, храните данные к персистентному устройству хранения данных в MAT-файле. Используя большие методы данных для симуляций требует дополнительных шагов вне того, что вы делаете, когда данные малы достаточно, чтобы поместиться в память рабочей области. Когда вы разрабатываете модель, рассматриваете логгирование и загрузку данных моделирования, не используя персистентное устройство хранения данных, если вы не обнаруживаете, что ваша модель имеет большие требования к данным та память перегрузки.
Этим примером является высокоуровневый рабочий процесс для обработки больших данных, которые одна симуляция производит и что другая симуляция использует в качестве входа. Для более подробной информации о главных задачах рабочего процесса см.:
Этот пример использует SimulationDatastore
объект для потоковой передачи данных в модель. В качестве альтернативы можно передать потоком DatasetRef
возразите непосредственно в модель.
Сконфигурируйте две модели, чтобы регистрировать несколько сигналов.
Симулируйте модели, регистрируя данные к персистентному устройству хранения данных для каждой модели.
sim(mdl1,'LoggingToFile','on','LoggingFileName','data1.mat'); sim(mdl2,'LoggingToFile','on','LoggingFileName','data2.mat');
Логгирование, которое включает большие данные, требует сохранения данных к персистентному устройству хранения данных как v7.3 MAT-файл. Только данные вошли в систему Dataset
формат сохранен в файл. Данные вошли в систему другие форматы, такие как Structure with time
, сохранено в памяти, в базовом рабочем пространстве.
Данные, которые вы регистрируете к персистентному устройству хранения данных, передаются потоком во время симуляции в маленьких фрагментах, чтобы минимизировать требования к памяти. Данные хранятся в файле, который содержит Dataset
объекты для каждого набора записанных данных (например, logsout
и xout
).
Создайте DatasetRef
объекты (dsr1
и dsr2
) для определенных наборов регистрируемых сигналов. Затем создайте SimulationDatastore
объекты (dst1
и dst2
) для значений элементов DatasetRef
объекты. Этот пример кода создает SimulationDatastore
для 12-го элемента logsout
для первой симуляции. Для второй симуляции пример кода создает сигнал со значениями, являющимися SimulationDatastore
объект для седьмого элемента logsout
. Можно использовать фигурные скобки в индексации.
dsr1 = Simulink.SimulationData.DatasetRef('data1.mat','logsout'); dsr2 = Simulink.SimulationData.DatasetRef('data2.mat','logsout'); dst1 = dsr1{12}; dst2 = dsr2{7};
Используйте SimulationDatastore
объекты как внешний вход для другой симуляции. Загружать SimulationDatastore
данные, включайте его в Dataset
объект. Вход datastore инкрементно загружается из MAT-файла. Третьим входом является timeseries
объект, который загружается в память в целом, не инкрементно.
input = Simulink.SimulationData.Dataset; input{1} = dst1; input{2} = dst2; ts = timeseries(rand(5,1),1,'Name','RandomSignals'); input{3} = ts; sim(mdl3,'ExternalInput','input');
Используйте MATLAB® большой анализ данных, чтобы работать с SimulationDatastore
объекты. Создайте timetable
объект путем чтения значений SimulationDatastore
объект. read
функционируйте читает фрагмент данных. readall
функция считывает все данные.
tt = dst1.Values.read;
Установите сеанс работы с MATLAB как глобальную среду выполнения (mapreducer
) для работы с высоким timetable
. Создайте высокий timetable
от SimulationDatastore
возразите и считайте timetable
объект с данными в оперативной памяти.
mapreducer(0); ttt = tall(dst1.Values);
Для другого примера, показывающего, как работать с большими данными моделирования, смотрите Работу с Большими данными.
Simulink.SimulationData.Dataset
| Simulink.SimulationData.DatasetRef
| matlab.io.datastore.SimulationDatastore
| timeseries