2014-10-29 50 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(:).';