无限嵌套在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

lonlat 是地理坐标。在 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 循环中,我在联系人中得到了结果。