Oro*_*ngo 1 performance matlab for-loop
我模拟了Irwin Hall分布的1,000,000个重复,每个重复是100个均匀随机变量的总和.我创建了这个程序,我认为它是正确的,但是MATLAB已经整夜运行而没有完成,所以有些(显然)错了,但我看不到哪里.这是我的计划,我希望有人可能会看到这个问题.
n=100; % Nb of samples
N=1000000; %Nb of replicates
for jj=1:N
    for ii=1:n
        x(ii)=rand();
    end
    s(jj)=sum(x);
    mu=mean(s);
    sigma2=var(s);
    sigma=std(s);
    S(jj)=1-normcdf((70-mu)/sigma);
    if mod(jj, 100000)==0
        jj
    end
end
histogram(S) 
Run Code Online (Sandbox Code Playgroud)
    n=1e2; % Nb of samples
N=1e6; % Nb of replicates
s = zeros(1,N); % INITIALISE, INITIALISE, INITIALISE
S = zeros(1,N); % INITIALISE, INITIALISE, INITIALISE
for jj=1:N
    x=rand(n,1); % Remove redundant inner loop
    s(1,jj)=sum(x);
    tmp = s(1,1:jj); % Create temporary storage for convenience
    mu=mean(tmp);
    sigma=std(sigma2); % You don't need the variance at all
    S(1,jj)=1-normcdf((70-mu)/sigma);
     if mod(jj, 1e5)==0
         disp('We are at iteration %i',jj); % Proper display command
     end
end
histogram(S) 
Run Code Online (Sandbox Code Playgroud)
这段代码N=1e4在我的i5-750处理器上运行了半秒钟.
最重要的是:不要打印到像你这样的控制台jj.要么根本不打印,要么使用disp命令以保持清晰.打印到控制台需要花费大量时间.同时初始化变量.循环中增长的变量需要很长时间.每次增加变量的长度,在这里增加一百万次,就强制MATLAB首先创建一个初始长度为+ 1的变量,然后复制内容,然后删除旧变量.这可能是你的代码如此长久的原因.
我还使用了一个临时变量tmp来使代码中的转换更容易一些.
|   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           533 次  |  
        
|   最近记录:  |