使用大数据进行模拟
模拟具有许多时间步长和信号的模型可能涉及大数据,这些数据太大,无法放入计算机的RAM中。这些情况包括:
日志模拟数据(信号日志、输出端口日志和状态日志)
加载用于模拟模型的输入信号数据
运行多个或并行模拟
要使用大数据进行模拟,请将数据存储到mat文件中的持久存储中。使用大数据技术进行模拟需要额外的步骤,而不仅仅是当数据足够小以适合工作空间内存时所做的工作。在开发模型时,请考虑在不使用持久存储的情况下记录和加载模拟数据,除非您发现模型具有内存过载的大数据需求。
大数据工作流程
这个示例是一个高级工作流,用于处理一个模拟生成的大数据,而另一个模拟将其用作输入。有关主要工作流任务的详细信息,请参见:
提示
本例使用SimulationDatastore
对象用于将数据流到模型中。或者,您可以流式播放DatasetRef
对象直接转换为模型。
配置两个模型来记录几个信号。
模拟模型,将数据记录到每个模型的持久存储中。
sim (mdl1“LoggingToFile”,“上”,“LoggingFileName”,“data1.mat”);sim (mdl2“LoggingToFile”,“上”,“LoggingFileName”,“data2.mat”);
涉及大数据的日志记录需要将数据保存到持久存储中的v7.3 mat文件。只有登录的数据
数据集
格式保存到文件中。以其他格式记录的数据,例如结构随时间变化
,保存在内存中,在基本工作空间中。在模拟过程中,将记录到持久存储的数据分成小块进行流处理,以最大限度地减少内存需求。数据存储在包含
数据集
对象为每组记录数据(例如,logsout
而且xout
).创建
DatasetRef
对象(dsr1
而且dsr2
)用于特定的记录信号组。然后创建SimulationDatastore
对象(dst1
而且dst2
的元素的值DatasetRef
对象。这个示例代码创建了一个SimulationDatastore
的第12个元素logsout
对于第一个模拟。对于第二个模拟,示例代码创建一个值为a的信号SimulationDatastore
的第七个元素logsout
.可以使用花括号进行索引。dsr1 = Simulink.SimulationData.DatasetRef(“data1.mat”,“logsout”);dsr2 = Simulink.SimulationData.DatasetRef(“data2.mat”,“logsout”);Dst1 = dsr1{12};Dst2 = dsr2{7};
使用
SimulationDatastore
对象作为另一个模拟的外部输入。加载SimulationDatastore
数据,包括在一个数据集
对象。数据存储输入是从mat文件增量加载的。第三个输入是atimeseries
对象,该对象作为一个整体加载到内存中,而不是增量加载。input = Simulink.SimulationData.Dataset;输入{1}= dst1;输入{2}= dst2;Ts =时间序列(rand(5,1),1,“名字”,“RandomSignals”);输入{3}= ts;sim (mdl3“ExternalInput”,“输入”);
使用MATLAB®大数据分析的工作配合
SimulationDatastore
对象。创建一个时间表
对象的值SimulationDatastore
对象。的读
函数读取部分数据。的readall
函数读取所有数据。tt = dst1.Values.read;
将MATLAB会话设置为全局执行环境(
mapreduce
)和高个子一起工作时间表
.创造一个高大的时间表
从一个SimulationDatastore
对象,并读取时间表
对象使用内存中的数据。mapreduce (0);ttt = tall(dst1.Values);
提示
有关显示如何使用大型模拟数据的另一个示例,请参见与大数据打交道.
另请参阅
功能
Simulink.SimulationData.Dataset
|timeseries
|Simulink.SimulationData.DatasetRef
|matlab.io.datastore.SimulationDatastore