我有以下問題。matlab查找()指標的細胞粒子,四維雙
考慮到我在一個區域中有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×10的顆粒組成。我想通過在particle(1,2,xp,yp)
中輸入yp
作爲數組來省略for循環,但不幸的是find()
函數無法處理數組。或者我錯了?你有一個想法如何使它工作得更快,讓我有
cell_x = [20,18,17,16]
cell_y = [20,19,18,17]
能否請您解釋一下爲什麼你爲索引搜索'find(x <= particle(1,1,xp,yp),1,'last')'並且不應用保存的x位置的變換。例如:在你的例子中,'x'的取值範圍爲-10到10,步長爲1,你可以使用保存值的floor並抵消它以獲得索引?這樣你會省略一個循環。你只需要知道你需要執行的保存的'x'或'y'座標上的哪個變換來獲得索引 – Irreducible
在我的原始代碼中,我有'x = linspace(-0.0800,0.0134,nx)',我的步驟是取決於'dx =(0.08 + 0.0134)/(nx-1);''nx = 100'。所以我沒有看到使用地板。但我也可能是錯的。 –
'linspace'產生線性間隔的x值,所以你只需要知道你的數組的步長和最小值,看到我的答案結束。 – Irreducible