无限嵌套在matlab中的for循环中
Infinite while nested in a for loop in matlab
我想制作一个 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
循环中检查所有其他行并计算对之间的距离,只要 [=12 中的条件=] 是 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
循环,我应该如何让它像我描述的那样工作?
我终于找到了答案。我post把它放在这里以备将来使用。
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 1km\n')
end
jj = jj + 1;
end
end
似乎 while
中嵌套的 for
循环是错误的,根本没有任何用处。第二个问题是 while
中的条件。我之前在while
条件下做的比较,写反了,没有意义。第三个问题是 if
语句。通过将 if
语句放在 while
循环中,我在联系人中得到了结果。
我想制作一个 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
循环中检查所有其他行并计算对之间的距离,只要 [=12 中的条件=] 是 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
循环,我应该如何让它像我描述的那样工作?
我终于找到了答案。我post把它放在这里以备将来使用。
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 1km\n')
end
jj = jj + 1;
end
end
似乎 while
中嵌套的 for
循环是错误的,根本没有任何用处。第二个问题是 while
中的条件。我之前在while
条件下做的比较,写反了,没有意义。第三个问题是 if
语句。通过将 if
语句放在 while
循环中,我在联系人中得到了结果。