Infinite while loop for iterating data
1 次查看(过去 30 天)
显示 更早的评论
I have a data-set that has the following form
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
where the MMSI is the ID of different ships.I want to compute the distance between two different points and get as a result the MMSIs involved as well as the times. I've written the following code, which does not work as I described.
for i = 1:length(MM(:,5))
t = MM(i,5);
ind1 = i;
length(ind1);
lat1 = lat(ind1);
lon1 = lon(ind1);
while (t <= (MM(i,5)+5))
for j = 2:length(MM(j,1))
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
This code essentially does the following:
for i = 1:length(MM(:,5))
ind1 = i;
lat1 = lat(ind1);
lon1 = lon(ind1);
ind2 = MM(2,1);
lat2 = lat(ind2);
lon2 = lon(ind2);
w = MM(d,5);
t = MM(i,5)+5+1
dis = distance(lat1, lon1, lat2, lon2);
if dis<=1
contact = [ind1, ind2, t, w];
end
end
and the while loop becomes an infinite loop. How can I write a while loop, in which I will take the elements from the second row and below and compute the distance from the element in the first row as long as the condition in the while is true? And after the distance is computed I want to get the contact matrix which contains the two different MMSIs and the times
0 个评论
回答(2 个)
Eng. Fredius Magige
2015-10-13
Hi you data MM not involved and should be called for execution MM=[] % being known as first matrix
I think for i = 1:length(MM(:,5)) be for i = 1:length(MM(:,6))
Thorsten
2015-10-13
编辑:Thorsten
2015-10-13
You can compute the distances between all pairs as
allpairs = nchoosek(1:8,2);
for i=1:numel(allpairs)
i1 = allpairs(i,1); i2 = allpairs(i,2);
d(i) = distance(lat(i1), lon(i1), lat(i2), lon(i2));
end
And select identifiers and time
ind = d > 1;
i1 = allpairs(ind,1); i2 = allpairs(ind,2);
IDandTime = [mmsi(i1) mmsi(i2) time(i1) time(i2) ];
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Loops and Conditional Statements 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!