在MATLAB中矢量化双循环

时间:2015-02-21 15:31:55

标签: matlab vectorization

我试图用这个双循环来计算坐标,所以我已经

A = zeros(100,100);  
for x = 1:100       
    for y = 1:100
        A(x,y) = x^2 + y  %or other functions with x and y
    end
end

虽然试图通过使用类似网格网格之类的东西来对其进行矢量化,但我已经看到过一些错误,例如"连接的矩阵的维数不一致。"

有没有办法对此进行矢量化?非常感谢你的帮助。

我实际上正在使用

A = zeros(31,31);
for x = 1:31       
    for y = 1:31
        A(y,x) = f(1.5, (x-16)/10 + i*((y-16)/10), 1000);
    end
end

其中f(1.5,...)是我用来计算A的点的其他函数,它只能输出一个数字。

尝试类似

的内容
A = zeros(31,31);
[X,Y] = ndgrid(1:31,1:31);
A(Y,X) = f(1.5, (X-16)/10 + i*((Y-16)/10), 1000);

给我:

使用horzcat时出错 连接的矩阵的尺寸不一致。

f

中的错误

第3行出错: A(Y,X)= f(1.5,(X-16)/ 10 + i *((Y-16)/ 10),1000);

1 个答案:

答案 0 :(得分:3)

N = 100成为数据大小。你可以在这里玩很少的方法。

方法#1:bsxfun内置@plus

A = bsxfun(@plus,[1:N]'.^2,1:N)

方法#2:bsxfunanonymous function -

func = @(x,y) x.^2 + y 
A = bsxfun(func,[1:N]',1:N)

对于xy的常规功能,您可以使用ndgridmeshgrid,如下所述。

方法#3:使用ndgrid -

[X,Y] = ndgrid(1:N,1:N);
A =  X.^2 + Y

方法#4:使用meshgrid -

[Y,X] = meshgrid(1:N,1:N);
A =  X.^2 + Y