1

スクリプトの実行時間が大幅に増加するため、合理化する必要があるコードがここにあります。

size=300;
resultLength = (size+1)^3;
freqResult=zeros(1, resultLength);

inc=1;

for i=0:size,
    for j=0:size,
        for k=0:size,
            freqResult(inc)=(c/2)*sqrt((i/L)^2+(j/W)^2+(k/H)^2);
            inc=inc+1;
        end
    end
end

c、L、W、および H はすべて定数です。サイズの入力が約 400 を超えると、実行時間が長すぎて待機できなくなり、ディスク領域がギガバイト単位で枯渇するのを見ることができます。何かアドバイス?

ありがとう!

4

2 に答える 2

0

より高速なソリューションは次のとおりです(Marcinの回答に基づく):

   [k, j, i] = ind2sub([size+1, size+1, size+1], [1:(size+1)^3]); 
   freqResult = (c/2)*sqrt(((i-1)/L).^2+((j-1)/W).^2+((k-1)/H).^2); 

私のPCで実行するのに約5秒かかりますsize = 300

以下はさらに高速です (ただし、見栄えはよくありません)。

   k = repmat(0:size,[1 (size+1)^2]);
   j = repmat(kron(0:size, ones(1,size+1)),[1 (size+1)]);
   i = kron(0:size, ones(1,(size+1)^2));
   freqResult = (c/2)*sqrt((i/L).^2+(j/W).^2+(k/H).^2);

〜3.5秒かかりますsize = 300

于 2013-08-22T16:44:21.983 に答える