我正在考虑重新设计一个双循环到我可以用于并行计算的东西。具体来说,我有
for i = 1 : N
x = x0+i*dx;
for j = 1 : N
y = y0+j*dy;
end
end
并且主程序调用需要x
和y
作为输入参数的函数。在我的问题中,变量x
和y
是独立的,因此两个for循环应该能够重新制作更简单的东西,可以更有效地运行,利用matlab的矩阵计算。
我正在考虑创建一个嵌套的2D数组,如(符号):
A = [{x0,y0},{x0,y1},{x0,y2},...,{x0,yN};
{x1,y0},{x1,y1},{x1,y2},...,{x1,yN};
...
{xN,y0},{xN,y1},{xN,y2},...,{xN,yN}]
即。 2D数组中的每个元素是由向量x和y的元素形成的2元组{xi,yi}
。我可以在matlab中创建这样的对象吗?如果是这样,我如何调用每个元组中的每个元素?我需要一种方法来调用每个元素,例如x2
中的{x2,y1}
,在此数组中。
我正在考虑这样做,以便使用GPU上的并行处理工具箱,使程序与每组元组{xi,yi}
同时给出的输入参数并行运行。
非常感谢您的帮助。 詹姆斯
答案 0 :(得分:0)
我认为您实际需要的是meshgrid
或ndgrid
>> [x y] = meshgrid( 1:N, 1:N )
对于N=3
,您将获得
>> [x y] = meshgrid( 1:3, 1:3 )
x =
1 2 3
1 2 3
1 2 3
y =
1 1 1
2 2 2
3 3 3
现在,如果您想要访问一对,则可以访问每个矩阵的x
和y
坐标。
例如,访问ii=1
,jj=2
>> ii=1; jj=2;
>> [x(ii,jj) y(ii,jj)]
如果您希望x
和y
都采用相同的值范围(例如此示例1:N
),则可以跳过{{1}的第二个参数}}
meshgrid
您可以使用>> [x y] = meshgrid( 1:N );
和meshgrid
修改x
的输入,以捕获y
和dx
所需的确切模式:
dy