我有以下问题。
考虑到我在一个区域中有4个粒子。 粒子以一定的速度穿过该区域。但是,在任何给定的时间点,我想知道这样一个粒子所在的单元格。
我的示例代码如下所示:
x = -10:1:10; % area
y = -10:1:10;
particle = zeros(1,2,1,4); % 4 Particle
particle(1,1,1,1) = 9.5; % x-position of the first particle
particle(1,2,1,1) = 9.5; % y-position of the first particle
particle(1,1,1,2) = 7.25;
particle(1,2,1,2) = 8.5;
particle(1,1,1,3) = 6.25;
particle(1,2,1,3) = 7.5;
particle(1,1,1,4) = 5.25;
particle(1,2,1,4) = 6.5;
for xp=1:size(particle,3)
for yp=1:size(particle,4)
if particle(1,1,xp,yp) < x(1)
cell_x = 1;
elseif particle(1,1,xp,yp) > x(end)
cell_x = size(x,2);
else
cell_x = find(x <= particle(1,1,xp,yp),1,'last');
end
if particle(1,2,xp,yp) < y(1)
cell_y = 1;
elseif particle(1,2,xp,yp) > y(end)
cell_y = size(y,2);
else
cell_y = find(y <= particle(1,2,xp,yp),1,'last');
end
end
end
对于许多52 x 10粒子,我的代码需要太长时间。我希望在yp
中输入particle(1,2,xp,yp)
作为数组来省略for循环,但不幸的是find()
函数无法处理数组。还是我错了?你知道如何让它更快地工作,以便我有
cell_x = [20,18,17,16]
cell_y = [20,19,18,17]
答案 0 :(得分:0)
我的评论的示例代码
x = -10:1:10; % area x
%input data
Numberofdata=4;
saved_x=[9.5 7.25 6.25 5.25];
%conversion from value to index
idx_x1=floor(saved_x)+abs(min(x))+1;
%search for index
for k=1:Numberofdata
idx_x2(k,1)=find(x <=saved_x(k),1,'last');
end
% Output
[idx_x1' idx_x2]
20 20
18 18
17 17
16 16
我知道它适用于矢量而不是矩阵,但是,您可以将此变换应用于矩阵的任何维度。
如果您没有按1的步骤更改x
,而是类似的事情:
x=min_x:dx:max_x
然后您需要执行以下操作:
idx_x1=floor(saved_x/dx)+abs(min_x/dx)+1;