Matlab 处理数据—最小值、最大值、均值、方差
2020-08-05 本文已影响0人
绿毛水怪的海
最近做了一个matlab实验任务,主要是将数据文档中的数据进行处理。考虑到数据文件的保密性,本文就简单介绍一下实验中用到的函数和语法。
实验数据以及实验目的
新建了一个数据文件data.txt,文件内容主要包括最小value(第一行);方案组合(color,size,length);表头(run no., number, value);以及具体的数字。
-run no.——运行次数序号,每个组合运行五次;
-number——每次运行中第一次达到最优值的迭代次数;
-value——运行得到的最优值;
本次实验的目的是得到每个组合中达最优值(最小值 456.7)的迭代次数的最小值、最大值、均值以及方差。
data.txt
代码实现
1. matlab读取文件,并输出“The minimal is 456.7”
%% 读取数据
fid = fopen('matlab实验-简书\data.txt','r+');
FormatString=repmat('%s',1,3);
A=textscan(fid,FormatString,1,'HeaderLines',0);
A1=A{1};
A2=cell2mat(A1);
formatSpec ='The minimal is %s.\n';
fprintf(formatSpec,A2)
2. 输出列名
%% 输出列名
s1=' ';
num=' num';
m1=' min';
m2=' max';
m3=' mean';
fdev=' fdev';
fprintf('%s %s %s %s %s %s\n',s1,num,m1,m2,m3,fdev);
3. 处理行名及数据内容
%% 处理行名及求数据
for x=1:7:14
%处理行名,将组合名称缩写
fid = fopen('matlab实验-简书\data.txt','r+');
B=textscan(fid,FormatString,1,'HeaderLines',x);%从文件的第x行开始取数据,取1行数据
B1=B{1};
B2=cell2mat(B1);
line_short=strrep(B2,'red','re');
line_short=strrep(line_short,'blue','bl');
line_short=strrep(line_short,'big','bi');
line_short=strrep(line_short,'small','sm');
line_short=strrep(line_short,'long','lo');
line_short=strrep(line_short,'short','sh');
%
C=textscan(fid,FormatString,5,'Headerlines',2);%接上面的B,从第x行后的第二行(x+2行)开始取数据,取5行
C1=C{3};
C1C=C{2};
C2=cell2mat(C1);
%将每个组合运行5次中达到最小值的number放进矩阵
C3=string(C2);
C4=vpa(C3,6);
C5=string(A2);
i=1;
xx=strings;
for y=1:5
if (C3(y)==C5)
yy=C1C{y};
xx(i)=yy;
i=i+1;
end
end
C6=double(xx);
le=length(C6(:));
count=le;
%计算每个组合5次运行中达到最小值的number的最小值、最大值、均值
data_min=min(C6(:));
data_max=max(C6(:));
C9=mean(C6(:));
data_mean=vpa(C9,4);
C11=0;
%计算方差
for j=1:le
C11=C11+(C6(j)-C9)^2;
end
C12=C11./(le-1);
data_fdev=vpa(C12,6);
%打印数据
fprintf('%s:%6.0f %6.0f %6.0f %7.0f %13.3f\n',line_short,count,data_min,data_max,data_mean,data_fdev);
fclose(fid);
end
代码结果
最终的实验结果如下:
实验结果
注:
本次实验代码不严谨,只是保证结果运行策略,没有进行规范化书写,毕竟只是个作业哈~