Matlab:粒子在空间中的初始位置

时间:2014-04-12 00:33:17

标签: matlab for-loop matrix

我有一个边长为L的立方体。这个立方体内部是一个较小的立方体,位于中心。沿着这个内部立方体均匀的空间,我想放置粒子。我有矩阵' walker',这是一个三维矩阵,以常规时间步长存储粒子的位置。具体地,步行者(i,j,k)是在时间步骤j的第i个粒子和第i个粒子的k位置的信息,其中k = 1,2和3,代表x,y和z方向。

这是我尝试给每个粒子一个初始位置:

L=16
W=5 %Number of walkers (particles)

%Initial Positions of Walkers (particles):
for i=1:W
    for j=1:3
    walker(i,1,j) = L/2 + i - 1;
    end
end

然而,这只是将每个粒子沿直线放置。有人可以给我一些关于如何实现这个目标的建议吗?

编辑:

x=linspace(0,L,W);
y=linspace(0,L,W);
z=linspace(0,L,W);

[X Y Z] = meshgrid(1:L,1:L,1:L);
xyz = [X(:),Y(:),Z(:)];
xyz = cat(1,xyz(:,[1 2 3]),xyz(:,[2 3 1]),xyz(:,[3 1 2]));
xyz = unique(xyz,'rows');

plot3(xyz(:,1),xyz(:,2),xyz(:,3),'.')

axis([-L L -L L -L L])

1 个答案:

答案 0 :(得分:1)

尝试使用此代码,这将平均地在多维数据集内部放置点:

x = linspace(-L,L,5);
y = linspace(-L,L,5);
z = linspace(-L,L,5);

[X Y Z] = ndgrid(x,y,z);
xyz = [X(:),Y(:),Z(:)];
xyz = cat(1,xyz(:,[1 2 3]),xyz(:,[2 3 1]),xyz(:,[3 1 2]));
xyz = unique(xyz,'rows')
plot3(xyz(61:65,1),xyz(61:65,2),xyz(61:65,3),'.'), grid on
axis([-L L -L L -L L])

x,y和z将是从-L到L的5个均匀间隔点。这将为您提供5 ^ 3 = 125个点,但您可以从xyz矩阵中选择5个成对的点。该图的图像如下所示:

enter image description here

这是沿原点垂直的5个均匀间隔点。 xyz中的对从1:5开始,然后是6:10,等等。您可以选择最适合您的配对。