【matlab】关于批量随机生成数据和批量保存运行结果

来源:互联网 发布:php短信接口类型 编辑:程序博客网 时间:2024/06/03 23:03

在科研中,如果算例非常多(几十上百个),安装一定的排列规则随机生成算例,运行后对结果进行分析的时候,如果能对算例随机生成,对运行结果批量保存到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


 




0 0
原创粉丝点击