Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 使用simout收集数据,以进行数千次运行的实验_Matlab_Simulink - Fatal编程技术网

Matlab 使用simout收集数据,以进行数千次运行的实验

Matlab 使用simout收集数据,以进行数千次运行的实验,matlab,simulink,Matlab,Simulink,我使用这段代码(如下所示)运行Simulink模型数千次。我希望每次跑步都能收集所有结果。 是否有方法收集每次运行的结果,然后组织它们 我确实试过simout,但我只跑了一次就得到了结果 Run(1).Settings={'....'}; Run(2).Setting={'....'}; .... dirout=sprintf('......,clock); mkdir(dirout); numofruns=length(Run); % or I can set it to 10000 fo

我使用这段代码(如下所示)运行Simulink模型数千次。我希望每次跑步都能收集所有结果。 是否有方法收集每次运行的结果,然后组织它们

我确实试过simout,但我只跑了一次就得到了结果

Run(1).Settings={'....'};
Run(2).Setting={'....'};
....

dirout=sprintf('......,clock);
mkdir(dirout);
numofruns=length(Run); % or I can set it to 10000

for i=1:numofruns
counter=counter+1;
disp(['Run:'num2str(Counter) '/' num2str(numofruns)])
for j=1:size(Run(i).Settings,1)
set_param([modelname '/' Run(i).Settings{j,1} '/enabled/' 
Run(i).Settings{j,2}],'value', num2str(Run(i).Settings{j,3}));
end 
set_param(modelname,'StopTime',num2str(StopTime));
sim(modelname);
filename=sprintf('%s/simout_%05.0f.mat',dirout,i);
simout=simout';
save(filename,'simout');
end
收集的结果应显示每次运行的结果。 例如:

simout退出运行1

simout退出运行2 等等


非常感谢您的帮助

1000 x 2双精度浮点数数组仅占用16000字节:

>> myMatrix = rand(1000, 2);
>> whos('myMatrix')
  Name             Size            Bytes  Class     Attributes

  myMatrix      1000x2             16000  double              
因此,您应该能够轻松地在内存中存储成千上万个。如果模拟输出的大小始终相同,则可以将其存储在三维阵列中:

% preallocate the array to prevent memory reallocation, which is slow
resultArray = zeros(numofruns, 1000, 2);

for i = 1:numofruns
    % run the simulation here, assume it returns 1000 x 2 matrix simout

    resultArray(i,:,:) = simout;
end
如果每次运行的行数可能不同,则可以使用单元格数组:

resultCellArray = cell(numofruns);

for i = 1:numofruns
    % run simulation here

    resultCellArray{i} = simout;
end
如果一次生成的数据实在太多,无法放入内存,但您希望将其存储在一个文件中,并能够访问其中的任意子集进行分析,那么您可能需要了解处理这些数据的技术。这将比在内存中处理数据慢得多


或者,您可以尝试使用,尽管我不知道这是否会处理内存太大的数据。

结果数据有多大-例如,您可以将其累积到单元格数组中,还是不适合存储在内存中?“你想如何处理‘收集的结果’——将它们绘制在一张图表上,计算统计数据,计算差异,?谢谢,@nekomatic。对于每次运行,我有两列1000行。我不确定它是否适合记忆。我想将它们一起绘制在一个图表上,并计算统计数据和差异。如果您使用的是现代版的Simulink,Simulink Data Inspector将允许您在多个运行中捕获和比较数据。