带有许多时间步长和信号的模型模拟可能涉及大数据,大到无法放入计算机的RAM中。这种情况包括:
测井模拟数据(信号测井、输出测井和状态测井)
加载用于模拟模型的输入信号数据
平行模拟
要使用模拟大数据,请将数据存储在mat文件中(参见将日志数据保存到持久存储).使用大数据技术进行模拟需要额外的步骤,而不需要工作空间内存和块等信号数据从文件和从电子表格可以处理。在开发模型时,请考虑在不使用持久存储的情况下记录和加载模拟数据,除非您发现模型的大数据需求会导致内存过载。
您可以使用从一个模拟中记录到持久存储的数据作为另一个模拟的输入。你可以用
对象在一个matlab.io.datastore.SimulationDatastore
对象以将数据流输入根轮廓尺寸块。创建万博1manbetxSimulink.SimulationData.Dataset
SimulationDatastore
对象的叶信号
对象的索引万博1manbetxSimulink.SimulationData.DatasetRef
DatasetRef
对象。
SimulationDatastore
以小块的形式输入数据流(默认情况下,每次100个样本)。根据仿真的需要加载数据。信号的全部数据永远不会完全加载到内存中。
第一步是创建一个万博1manbetxSimulink.SimulationData.Dataset
对象的信号数据加载到根级输入端口。您可以使用记录到一个模拟中的持久存储中的数据作为另一个模拟的输入。或者,您可以创建数据集
在MATLAB对象®(见为根级导入创建数据集对象.
然后创建万博1manbetxSimulink.SimulationData.DatasetRef
对象,用于加载单个信号的数据。
加载数据:
你可以使用负载
命令载入数据集
对象从一个持久存储的mat -文件转换为模型。整个数据集被加载到内存中,所以对于大数据来说,这不是一个好的方法。
为了避免在加载大数据时溢出内存,可以使用这些方法中的一种进行流处理数据集
将数据转换为模型进行仿真:
流一DatasetRef
对象直接进入模型是一种更简单的方法。
流一matlab.io.datastore.SimulationDatastore
对象中包含的数据集
对象可以让你更多地控制流。你也可以用aSimulationDatastore
对象创建MATLAB高时间表对象,直接使用MATLAB工具进行大数据处理。
将大数据加载到根级轮廓尺寸块在模型中,创建数据集
具有相同数量元素的对象轮廓尺寸块。元素的顺序必须与轮廓尺寸块在模型中。你可以使用空数组([]
)来使用an的接地值轮廓尺寸块。您可以使用从另一个模拟(存储在mat文件中)记录到持久存储的数据,也可以手动创建Dataset对象。
创建一个数据集
对象,则可以使用
函数创建createInputDataset
数据集
对象,该对象包含与轮廓尺寸模型中的块。生成的数据集中的信号具有根导入的属性以及模型开始和停止时相应的地面值。
万博1manbetx®使用接地值为任何轮廓尺寸未在相应的块中指定数据的块数据集
元素。
对于单个非总线信号数据,可以指定这些数据类型数据集
元素:
timeseries
时间表
matlab.io.datastore.SimulationDatastore
双
向量或结构双
数据
一个万博1manbetxSimulink.SimulationData.Signal
,万博1manbetxSimulink.SimulationData.State
,或万博1manbetxSimulink.SimulationData.DataStoreMemory
对象
满足以下要求之一的数组:
一个数组,第一列为时间,其余列分别对应一个输入端口。看到将数据数组加载到根级输入.
一个资料片
用于驱动函数调用子系统的根导入的数组。
结构——看将数据结构加载到根级输入.
对于总线信号,为每个叶信号使用一个带有数据元素的结构,使用以下格式之一:
一个MATLABtimeseries
对象
一个MATLAB时间表
对象
一个matlab.io.datastore.SimulationDatastore
对象
空矩阵
另一种结构,每个信号的数据元素与总线数据结构的这些要求一致
当你指定时间表
作为元素数据集
或者是公共汽车时间表
必须只包含一个信号的数据。
这个例子展示了如何创建一个数据集
包含混合物的对象timeseries
和SimulationDatastore
数据类型。对于这个例子,假设你有两个数据集:
ds3
——存储在dataFileName.mat
in_mem_ds
-保存在内存为dataFileName2
创建一个DatasetRef
为ds3
和负载in_mem_ds
到内存中。
安全域= S万博1manbetximulink.SimulationData.DatasetRef (dataFileName,“ds3”);in_mem_ds =负载(dataFileName2);
聚合下一个模拟的元素。使用一个内存信号,一个值为a的信号SimulationDatastore
引用mat文件中的数据,以及一个原始数据SimulationDatastore
没有万博1manbetxSimulink.SimulationData.Signal
对象包装器。
el1 = in_mem_ds.get (1);el2 =安全域{2};el3 =安全域{3}. values;谁el1el2el3
名称大小字节类el1 1x1 664 Simulink.Simula万博1manbetxtionData.Signal el2 1x1 222 Simulink.SimulationData.Signal el3 1x1 8 matlab.io.datastore.SimulationDatastore . simulationdata . signal el3 1x1 8
创建一个数据集
对象,并使用感兴趣的信号的元素填充它。
input_ds = 万博1manbetxSimulink.SimulationData.Dataset;input_ds = input_ds.add (el1,“记忆价值”);input_ds = input_ds.add (el2,数据存储的值的);input_ds = input_ds.add (el3,原始数据存储的)
input_ds = 万博1manbetxSimulink. simulationdata . dataset Package: Simulink。模拟Data Characteristics: Name: '' Total Elements: 3 Elements: 1 : 'in memory values' 2 : 'datastore values' 3 : 'raw datastore'
用input_ds
数据集作为外部输入。
= sim卡(”mdl LoadExternalInput”,“上”,“ExternalInput”,“input_ds”);
模拟流的值由数据存储指定。
创建对持久存储的引用数据集
对象在存储记录数据的mat -文件中的名称数据集
变量。你可以使用万博1manbetxSimulink.SimulationData.DatasetRef.getDatasetVariableNames
函数获取数据集
在mat文件中的变量。
使用
函数获取的名称万博1manbetxSimulink.SimulationData.DatasetRef.getDatasetVariableNames
数据集
变量在MAT-file中的处理速度比使用谁
或谁
功能。
对于大数据,使用万博1manbetxSimulink.SimulationData.DatasetRef
对象来访问数据集中特定类型的记录数据。的元素DatasetRef
对象来访问特定信号的数据。
当您访问信号日志记录、输出或状态日志记录数据从一个mat文件通过日志记录到持久存储创建时,Simulink增量地将数据读入MATLAB工作空间(逐个信号)。万博1manbetx
当你使用DatasetRef
对象引用mat文件中的数据以检索文件中的数据时,它检索数据的最新版本。
这个例子展示了如何构造和使用DatasetRef
对象访问记录到持久存储的模型的数据。这个简单的示例展示了将日志记录到持久存储的基本步骤。这个示例并不代表将日志记录到持久存储的真实情况,因为它展示了一个内存需求很小的简短模拟。但是,您可以对大数据使用相同的工作流。
打开vdp
模型。
在配置参数>数据导入/导出窗格,选择这些参数:
州
Log数据集到文件.
设置格式参数数据集
.
其他参数保持不变,单击应用.
在模型中,单击一个信号,在操作栏中,选择启用数据日志记录.
模拟模型。
得到一份数据集
的变量名out.mat
文件。在本例中,变量用于来自状态日志记录(xout
)及信号测井(logsout
).
varNames = 万博1manbetxSimulink.SimulationData.DatasetRef.getDatasetVariableNames (“out.mat”)
varNames = 'xout' '注销'
创建对已记录状态数据的引用(xout
)储存在out.mat
.
statesLogRef = 万博1manbetxSimulink.SimulationData.DatasetRef (“out.mat”,“xout”)
Simulink.Simula万博1manbetxtionData.DatasetRef特征:Location: out。名称BlockPath ____ _________ 1 " vdp/x1 2 " vdp/x2 .mat (/myDir/out.mat) Identifier: xout Resolved Dataset: 'xout' with 2 elements
中存储的信号记录数据创建一个引用out.mat
.信号测井数据的变量为logsout
.
sigLogRef = 万博1manbetxSimulink.SimulationData.DatasetRef (“out.mat”,“logsout”)
sigLogRef = 万博1manbetxSimulink.SimulationData.DatasetRef特征:位置:out。mat (/myFile/out.mat) Identifier: logsout Resolved Dataset: 'logsout' with 1 element Name BlockPath ____ _________ 1 x1 vdp/x1 . log .mat (/myFile/out.mat
使用DatasetRef
访问信号记录的第一个元素数据集
.
sigLogRef {1}
ans = 万博1manbetxSimulink. simulationdata . signal Package: Simulink。模拟Data Properties: Name: 'x1' PropagatedName: '' BlockPath: [1x1 Simulink.SimulationData.BlockPath] PortType: 'outport' PortIndex: 1 Values: [1×1 matlab.io.datastore.SimulationDatastore]
您可以创建
用于记录到持久存储的信号。你可以用matlab.io.datastore.SimulationDatastore
SimulationDatastore
对象的一个元素数据集
对象,加载到模型中。但是,您不能加载数据存储
对象直接导入模型。你也可以用aSimulationDatastore
对象来创建一个MATLAB的高时间表对象。当你使用SimulationDatastore
对象来访问通过日志记录到持久存储创建的mat文件中的数据,Simulink将信号的数据增量地读取到MATLAB工作空间(逐个示例)。万博1manbetx
假设你用out.mat
中的示例中创建的文件为根级导入创建数据集对象.您可以创建SimulationDatastore
对象中的第一个信号logsout
数据集。你可以使用readsize
函数与一个SimulationDatastore
对象重置流的块大小。
sigLogRef = 万博1manbetxSimulink.SimulationData.DatasetRef (“out.mat”,“logsout”);loggedSig1 = sigLogRef {1};loggedSig1。值
ans = SimulationDatastore with properties: ReadSize: 100 FileName: 'out.mat'
或者,您可以使用万博1manbetxSimulink.SimulationData.DatasetRef.getAsDatastore
函数创建SimulationDatastore
从一个DatasetRef
对象。例如:
sigLogRef = 万博1manbetxSimulink.SimulationData.DatasetRef (“out.mat”,“logsout”);loggedSig1 = sigLogRef.getAsDatastore (1);
如果你使用索引语法或万博1manbetxSimulink.SimulationData.DatasetRef.getAsDatastore
方法来访问DatasetRef
对象元素,则返回值为matlab.io.datastore.SimulationDatastore
对象。例如:
loggedSig1。值
一个SimulationDatastore
从内存流数据,而不是从mat -文件,当数据集
对象,SimulationDatastore
对象的构建满足以下任一条件:
的数据集
对象在R2017a之前被保存到MAT-file。
使用的mat文件不是一个v7.3的mat文件。
为了最小化所使用的内存量,可以将数据流从万博1manbetxSimulink.SimulationData.DatasetRef
物体或从…matlab.io.datastore.SimulationDatastore
对象中包含的数据集
对象作为根级的模拟输入轮廓尺寸块。要做到这一点,就在输入配置参数时,指定DatasetRef
或数据集
对象,该对象包含SimulationDatastore
对象(或对象)。
当您加载记录到持久存储的数据存储日志数据时,行为取决于加载期间使用的模拟模式。
当您以普通模式加载数据存储日志数据时,Simulink将数据存储数据流输入模型。万博1manbetx
在其他模拟模式中,所有记录的数据存储数据作为一个整体加载到内存中。
万博1manbetxSimulink.SimulationData.Dataset
|万博1manbetxSimulink.SimulationData.DatasetRef
|createInputDataset
|matlab.io.datastore.SimulationDatastore
|timeseries
|时间表