Matlab 使用simout收集数据,以进行数千次运行的实验
我使用这段代码(如下所示)运行Simulink模型数千次。我希望每次跑步都能收集所有结果。 是否有方法收集每次运行的结果,然后组织它们 我确实试过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
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将允许您在多个运行中捕获和比较数据。