您的位置:首页 > 编程语言 > MATLAB

【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

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: