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