消除Matlab中的循环

时间:2014-10-13 13:17:42

标签: matlab for-loop vectorization

这是一个简单的问题。以下嵌套for循环创建一个正弦波值数组。

N = 2^16;
for m = 1:10;
    for i = 1:N
        sine(m,i) = sin(2*pi*i./(8*2^m));
    end
end

似乎我应该能够在不使用for循环的情况下创建这个数组,但是我尝试了各种语法并且总是收到错误消息。提前感谢任何见解。

3 个答案:

答案 0 :(得分:6)

您可以像这样使用bsxfun

sine = sin(bsxfun(@times, 2*pi*(1:2^16), 1./(8*2.^(1:10))' ));

答案 1 :(得分:5)

尝试以下方法:

ii = 1:2^16;
m  = [1./(2.^(1:10))].'% transpose

prefactor = 2 * pi / 8;

sine = sin(prefactor * m * ii);

我执行矩阵乘法A*B,其中a是列向量大小nrows,B是行向量大小ncols,得到的矩阵大小为nrows x ncols。因此,m是列向量,ii是行向量。

答案 2 :(得分:4)

尝试使用ndgrid

N=2^16;
[M, I] = ndgrid(1:10, 1:N);
sine = sin(2*pi*I./(8*2.^M));