2014-10-29 65 views
2

是否可以從以下代碼中刪除所有循環,並使用向量計算k值。從代碼中刪除循環?

index = 0; 
for i = 1.1:0.1:2.5 
    for j = 200:300:3000 
     for z = 1:14:14000 
      index = index + 1; 
      k(index) = (log(i) *pi/(sqrt(j)))* exp(z); 
     end 
    end 
end 

回答

2

像這樣的事情

[I, J, Z] = meshgrid(1.1 : 0.1 : 2.5, 200 : 300 : 3000, 1 : 14 : 14000); 
k = log(I) .* pi ./ sqrt(J) .* exp(Z); 
k = reshape(permute(k, [3 2 1]), 1, []); 

PS:你確定範圍? exp(14000)不能以常規精度計算。 並檢查此步驟permute(k, [3 2 1]) - 可能訂單不完全相同。

1

你可以在這裏使用簡單的matrix multiplication,這必須是快速,高效的爲沒有什麼比在MATLAB矩陣乘法 -

array1 = 1.1:0.1:2.5; 
array2 = 200:300:3000; 
array3 = 1:14:14000; 

mult1 = (log(array1).')*(pi./(sqrt(array2))); %//' 
mult2 = mult1(:)*exp(array3); 
out = mult2(:).';