J'ai un ensemble de données qui contient différents types de données comme il est indiqué ci-dessousUnresponsive boucle en Matlab
MMSI Latitude Longitude Date Time Time (decimal)
277333444 59.8564 30.497 04-08-12 09:49 589
241025000 37.3462 24.8713 04-08-12 09:49 589
636012774 35.7931 28.7227 04-08-12 11:29 680
248681000 36.9327 27.3042 04-08-12 11:52 703
312847000 35.3429 28.5582 04-08-12 11:52 703
239737000 36.4827 27.9405 04-08-12 11:52 703
200 36.7672 34.6444 04-08-12 12:52 763
237071900 36.7778 24.578 04-08-12 12:52 763
et les données sont importées à partir d'un fichier csv. Dans les données d'exemple, l'heure est triée, mais dans les données, l'heure est mélangée. Pour les données, je veux calculer la distance entre deux points différents et obtenir ainsi les MMSI impliqués ainsi que les temps. J'ai écrit le code suivant, qui fait presque ce que j'ai décrit.
fid = fopen('vessel-movements-2.csv');
C = textscan(fid, '%f %f %f %f %f %s %s %s %f', 'HeaderLines', 1, 'Delimiter', ',');
fclose(fid);
iscell(C);
M = cell2mat(C(:,1:5));
DateString = (C{1,7});
formatIn = 'dd-mm-yy';
P = datenum(DateString, formatIn);
M = horzcat(M,P);
Q = cell2mat(C(:,9));
M = horzcat(M,Q);
a = M(:,6);
b=unique(a);
c = M(:,1);
d = unique(c);
lat = M(:,2);
lon = M(:,3);
time = M(:,7);
TimeStamp = P+time;
M = horzcat(M,TimeStamp);
MM = sortrows(M,8);
all(M(:,8) == MM(:,8))
for i = 1:length(MM(:,8))
t = MM(i,8);
ind1 = i;
length(ind1);
lat1 = lat(ind1);
lon1 = lon(ind1);
while (t <= (MM(i,8)+5))
for j = 2:length(d)
ind2 = j;
length(ind2);
lat2 = lat(ind2);
lon2 = lon(ind2);
w = MM(j,8);
end
dis = distance(lat1, lon1, lat2, lon2);
t = t+1;
end
if dis<=1
contact = [ind1, ind2, t, w];
end
end
Les index dans le script sont légèrement différentes de ce qu'elles devraient être des données présentées, mais il y a d'autres colonnes dans mes données, qui ne sont pas utilisés dans la boucle, donc pour une meilleure visualisation, je les ai laissés de l'échantillon. Il calcule correctement la distance pour la première fois, mais dans la boucle externe, le programme semble être à la traîne et fonctionner indéfiniment, mais sans aucun résultat. J'ai essayé le débogueur mais le résultat est le même. Je ne peux pas voir le problème et toute aide serait appréciée.
Il ne semble pas que votre boucle 'while' modifie' t', donc il sera bloqué dans une boucle infinie. – excaza
Il semble que dans les données d'échantillon, mais dans les données réelles, il y a beaucoup de valeurs de temps qui ont une différence de 1 ou moins de 5, donc la boucle 'while' devrait modifier' t' – vasouli
't> (MM (i , 8) +5); 'ne change pas' t' – excaza