Je souhaite créer une boucle while
, imbriquée dans une boucle for
dans Matlab afin de trouver la distance entre différentes paires dans les données. Mes données ont la forme suivanteInfini tout en étant imbriqué dans une boucle for dans matlab
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
et lat
sont coordonnées géographiques. Dans la boucle for
, je veux prendre la première ligne de la matrice et ensuite dans la boucle while
vérifier toutes les autres lignes et calculer la distance entre les paires tant que la condition dans le while
est true
. Ce que je veux dire c'est que pour la première rangée je veux que le programme calcule la distance entre les paires 1-2, 1-3 à l'heure 803, puis la distance 1-2, 1-3 à l'heure 803 encore. Quand j'incrémente l'étape dans la boucle for
par 1, encore une fois, le programme devrait calculer la distance entre les paires 2-3 à 803, puis 2-3 à 804 et ainsi de suite, etc. Pour ce faire, je l'ai écrit la boucle for
comme ci-dessous:
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
Avec cette boucle for
je reçois une boucle infinie while
. Ma question est pourquoi est-ce que j'obtiens cette boucle infinie while
et comment suis-je censé faire fonctionner comme je l'ai décrit?
[Utilisez le débogueur] (http://www.mathworks.com/help/matlab/matlab_prog/debugging-process-and-features.html) pour parcourir le code et voir ce qui se passe dans votre boucle. – excaza
J'ai utilisé le débogueur et je vois que le programme ne fonctionne que pour la première valeur de la boucle 'while'. Après cela, il va dans une boucle infinie et il ne change aucune valeur dans le 'alors' – vasouli
Alors vous devez déterminer pourquoi les valeurs ne sont pas modifiées. Peut-être que vous pouvez imprimer certaines valeurs de clé, soit dans le terminal ou au fichier. Par exemple, vous voudrez peut-être imprimer chaque hundreth ou tousand 't'? Il est difficile pour nous de dire puisque nous n'avons pas maintenant la gamme attendue. Je ne pense pas vraiment que ce soit une question pour SO. C'est plutôt une chose privée entre vous et le débogueur;). – patrik