我想做一个while
循环,嵌套在Matlab中的for
循环中,以便找到数据中不同对之间的距离。我的数据有以下形式
ID lon lat time
1 33.56 40.89 803
2 32.45 41.03 803
3 35.78 39.85 803
2 33.04 40.21 804
3 36.89 40.23 804
2 33.98 39.33 806
2 33.67 39.73 809
3 37.02 40.77 809
lon
和lat
为地理坐标。在for
循环中,我想从矩阵中取出第一行,然后在while
循环中检查所有其他行并计算对之间的距离,只要while
中的条件是true
。我的意思是,对于第一行,我想让程序计算时间为803时1- 2,1 -3对之间的距离,然后是时间为803时1- 2,1 -3对之间的距离。当我再次将for
循环中的步长增加1时,程序应该计算在803处2-3对之间的距离,然后在804处2-3对,以此类推。为此,我将for
循环编写如下:
for ii = 1:length(MM(:,4))
t = MM(ii,4);
ind1 = ii;
length(ind1);
lat1 = lat(ind1);
lon1 = lon(ind1);
jj = ii +1;
while (t <= (MM(ii,4)+5))
for jj = 2:length(MM(:,4))
ind2 = jj;
length(ind2);
lat2 = lat(ind2);
lon2 = lon(ind2);
w = MM(jj,4);
end
dis = distance(lat1, lon1, lat2, lon2);
t = t + 1;
end
if dis <= 1
[contact] = [ind1, ind2, t, w];
end
end
使用这个for
循环,我得到一个无限的while
循环。我的问题是,为什么我得到这个无限的while
循环,我应该如何使它工作,我所描述的?
for ii = 1:length(MM(:,4))
t = MM(ii,4);
ind1 = ii;
length(ind1);
lat1 = lat(ind1);
lon1 = lon(ind1);
jj = ii + 1;
while (MM(jj,4) - t <= 5)
ind2 = jj;
length(ind2);
lat2 = lat(ind2);
lon2 = lon(ind2);
dis = distance(lat1, lon1, lat2, lon2);
if dis <= 1
contact = [MM(ind1,1), MM(ind2,1), t, MM(jj,4)]
else
fprintf('There is no distance smaller than 1kmn')
end
jj = jj + 1;
end
end
似乎while
中嵌套的for
循环是错误的,根本没有任何用途。第二个问题是while
的条件。我之前在while
条件下所做的比较是向后写的,没有任何意义。第三个问题是if
表述。通过将if
语句放入while
循环中,我在联系人中获得了结果。