Симуляция моделей с множеством временных шагов и сигналов может включать большие данные, которые являются слишком большими, чтобы помещаться в оперативную память вашего компьютера. Такие ситуации включают:
Данные моделирования логгирования (логгирование сигналов, выход портов и логгирование состояний)
Загрузка входного сигнала данных для симуляции модели
Выполнение нескольких или параллельных симуляций
Чтобы работать с большими данными для симуляций, сохраните данные в постоянном хранилище в MAT-файле. Использование методов больших данных для симуляций требует дополнительных шагов сверх того, что вы делаете, когда данные достаточно малы, чтобы помещаться в памяти рабочей области. Когда вы разрабатываете модель, рассмотрите логгирование и загрузку данных моделирования без использования постоянного хранилища, если вы не обнаружите, что ваша модель имеет требования к большим данным, которые перегружают память.
Этот пример является высокоуровневым рабочим процессом для обработки больших данных, которые производит одна симуляция и которые другая симуляция использует в качестве входов. Для получения дополнительной информации о основных задачах рабочего процесса смотрите:
Совет
Этот пример использует SimulationDatastore объект для потоковой передачи данных в модель. Также можно транслировать DatasetRef объект непосредственно в модель.
Сконфигурируйте две модели, чтобы записать несколько сигналов.
Симулируйте модели, регистрируя данные в постоянном хранилище для каждой модели.
sim(mdl1,'LoggingToFile','on','LoggingFileName','data1.mat'); sim(mdl2,'LoggingToFile','on','LoggingFileName','data2.mat');
Логгирование, которое включает большие данные, требует сохранения данных в постоянном хранилище как MAT-файл версии 7.3. Только данные, зарегистрированные в 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 объект. The read функция считывает фрагмент данных. The readall функция считывает все данные.
tt = dst1.Values.read;
Установите сеанс работы с MATLAB как глобальное окружение выполнения (mapreducer) для работы с высокими timetable. Создайте tall timetable из SimulationDatastore объект и чтение timetable объект с данными в памяти.
mapreducer(0); ttt = tall(dst1.Values);
Совет
Другой пример, показывающий, как работать с большими данными моделирования, см. в Работе с большими данными.
matlab.io.datastore.SimulationDatastore | Simulink.SimulationData.Dataset | Simulink.SimulationData.DatasetRef | timeseries