【matlab】关于批量随机生成数据和批量保存运行结果
2016-07-04 19:50
633 查看
在科研中,如果算例非常多(几十上百个),安装一定的排列规则随机生成算例,运行后对结果进行分析的时候,如果能对算例随机生成,对运行结果批量保存到excel中,可以大大提高科研的效率。现将我的一些程序分享一下。大家可以借鉴一下整体的框架。
批量产生随机算例,并且保存到以一定规则命名的文件中:
clc
clear all
file_n=[5 10 15 20 25 30 35 4045 50 55 60];
file_p=[30 60 90];
file_m=[1 2 3];
tic
for n_i=1:length(file_n)
for p_i=1:length(file_p)
for m_i=1:length(file_m)
n=file_n(n_i);
p=file_p(p_i);
prob=[p/100,1-p/100];
l=round(rand(1,n)*19+1);
for i=1:n
for j=1:n
if i==j
c(i,j)=0;
else
a=round(rand(1,1)*9+1);
b=[a 0];
c(i,j)=randsrc(1,1,[b;prob]);
end
end
end
filename=['E:\,'n_',num2str(file_n(n_i)),'_p_',num2str(file_p(p_i)),'_',num2str(file_m(m_i)),'.dat'];
fid=fopen(filename,'w');
fprintf(fid,'%d',n);
fprintf(fid,'\n');
fprintf(fid,'\n');
fprintf(fid,'%d\t',l);
fprintf(fid,'\n');
fprintf(fid,'\n');
for i=1:n
for j=1:n
fprintf(fid,'%d\t',c(i,j));
if j==n
fprintf(fid,'\n');
end
end
end
fclose(fid);
end
end
end
toc
批量运行程序,把结果保存到excel中:
与生成算例类似,可以先将数据读入matlab中,并且以变量的形式读入,运行结果保存到excel中便于后期的分析整理。
clc
clear all
diary('E:\diary.txt');
diary on
file_n=[5 10 15 20 25 30 35 4045 50 55 60];
file_p=[30 60 90];
file_m=[1 2 3];
for n_i=1:length(file_n)
result=[];
time=[];
for p_i=1:length(file_p)
for m_i=1:length(file_m)
f=[];
filename=['E:\','n_',num2str(file_n(n_i)),'_p_',num2str(file_p(p_i)),'_',num2str(file_m(m_i)),'.dat'];
disp(filename);
fid=fopen(filename);
n=str2num(fgetl(fid));
fgetl(fid);
l=str2num(fgetl(fid));
fgetl(fid);
for i=1:n
A{i}=fgetl(fid);
f(i,:)=str2num(A{i});
end
fclose(fid);
……………………算法程序………………
cpu_time=output.solvertime
% output.yalmiptime
result=[result;res_obj]
time=[time;cpu_time]
end
end
if file_n(n_i)==5
xlswrite('E:\result.xlsx',result,sheet1,'C2:C10');
xlswrite('E:\result.xlsx',time,sheet1,'D2:D10');
elseif file_n(n_i)==10
……………………(类似的读入)…………
end
end
diary off
批量产生随机算例,并且保存到以一定规则命名的文件中:
clc
clear all
file_n=[5 10 15 20 25 30 35 4045 50 55 60];
file_p=[30 60 90];
file_m=[1 2 3];
tic
for n_i=1:length(file_n)
for p_i=1:length(file_p)
for m_i=1:length(file_m)
n=file_n(n_i);
p=file_p(p_i);
prob=[p/100,1-p/100];
l=round(rand(1,n)*19+1);
for i=1:n
for j=1:n
if i==j
c(i,j)=0;
else
a=round(rand(1,1)*9+1);
b=[a 0];
c(i,j)=randsrc(1,1,[b;prob]);
end
end
end
filename=['E:\,'n_',num2str(file_n(n_i)),'_p_',num2str(file_p(p_i)),'_',num2str(file_m(m_i)),'.dat'];
fid=fopen(filename,'w');
fprintf(fid,'%d',n);
fprintf(fid,'\n');
fprintf(fid,'\n');
fprintf(fid,'%d\t',l);
fprintf(fid,'\n');
fprintf(fid,'\n');
for i=1:n
for j=1:n
fprintf(fid,'%d\t',c(i,j));
if j==n
fprintf(fid,'\n');
end
end
end
fclose(fid);
end
end
end
toc
批量运行程序,把结果保存到excel中:
与生成算例类似,可以先将数据读入matlab中,并且以变量的形式读入,运行结果保存到excel中便于后期的分析整理。
clc
clear all
diary('E:\diary.txt');
diary on
file_n=[5 10 15 20 25 30 35 4045 50 55 60];
file_p=[30 60 90];
file_m=[1 2 3];
for n_i=1:length(file_n)
result=[];
time=[];
for p_i=1:length(file_p)
for m_i=1:length(file_m)
f=[];
filename=['E:\','n_',num2str(file_n(n_i)),'_p_',num2str(file_p(p_i)),'_',num2str(file_m(m_i)),'.dat'];
disp(filename);
fid=fopen(filename);
n=str2num(fgetl(fid));
fgetl(fid);
l=str2num(fgetl(fid));
fgetl(fid);
for i=1:n
A{i}=fgetl(fid);
f(i,:)=str2num(A{i});
end
fclose(fid);
……………………算法程序………………
cpu_time=output.solvertime
% output.yalmiptime
result=[result;res_obj]
time=[time;cpu_time]
end
end
if file_n(n_i)==5
xlswrite('E:\result.xlsx',result,sheet1,'C2:C10');
xlswrite('E:\result.xlsx',time,sheet1,'D2:D10');
elseif file_n(n_i)==10
……………………(类似的读入)…………
end
end
diary off
相关文章推荐
- 基于MATLAB的线性代数 矩阵共轭转置
- 基于MATLAB的线性代数 矩阵的合成(二维)
- 基于MATLAB的线性代数 矩阵的拆分
- 基于MATLAB的线性代数 化简为阶梯形矩阵(两个矩阵)
- 基于MATLAB的线性代数 对矩阵进行删除
- 基于MATLAB的线性代数 化简为阶梯形矩阵(单个矩阵)
- 基于MATLAB的线性代数 将矩阵变成列、行向量(按照竖着存储)
- 基于MATLAB的线性代数 矩阵是否正定的判断
- 基于MATLAB的线性代数 提取出矩阵的一行
- 基于MATLAB的线性代数 正交矩阵的判断
- 基于MATLAB的线性代数 合同矩阵判断
- 基于MATLAB的线性代数 对角化是否可以进行的判断
- 基于MATLAB的线性代数 两矩阵是否相同的判断
- 基于MATLAB的线性代数 矩阵是否可逆的判断
- Matlab中删除cell数组中的空元素
- 使用 matlab 进行正太拟合
- 【matlab】关于取整
- MATLAB图像处理基础
- MATLAB图像处理基础
- 求矩阵中最大(小)值并返回其行列号