For loop not working as desired
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
Buzz
am 15 Sep. 2014
Kommentiert: Star Strider
am 15 Sep. 2014
Hi,
I am calculating the distance and velocity between GPS coordinates (lat,long,height) and it appears to work well when I used single values. However, I have a matrix of 79 GPS coordinates (3x79 matrix) and I want to find the distance and speed between each two consecutive points. When I try to use a for loop the output I get is all zeros apart from the first and last value.
I am probably doing something silly but I can spot it...any suggestions are appreciated :)
for k=1:77
R=6378.1e3;
latDistance = copter_llh(1,k+1) - copter_llh(1,k);
lonDistance = copter_llh(2,k+1) - copter_llh(2,k);
a = sin(latDistance / 2) * sin(latDistance / 2) + cos(copter_llh(1,k))...
*cos(copter_llh(1,k+1)) * sin(lonDistance / 2) * sin(lonDistance / 2);
c = 2 *atan2(sqrt(a), sqrt(1 - a));
distance = R * c * 1000; % convert to meters
height = copter_llh(3,k+1) - copter_llh(3,k);
distance = sqrt((distance^ 2) + (height^2));
velocity = distance/0.1*60; % stepsize =0.1min ___speed in m/s
distance(:,k)=(distance);
velocity(:,k)=(velocity);
end
1 Kommentar
dpb
am 15 Sep. 2014
Start with the deltas can be gotten entirely out of the loop...
lat=diff(copter_llh(1,:),1,2);
lon=diff(copter_llh(2,:),1,2);
ht=diff(copter_llh(3,:),1,2);
The above does all 78 differences for a 79-column array; your loop only will return 77 differences from 2-1 thru 78-77; I'm not understanding the why of that; perhaps there's something irregular in the last column or it wraps around or something???
After that, the products can be computed with .* "dot" operator if you fix the lengths to be consistent and the distance computed from the dot multiply of the vectors as well.
Should be able to eliminate the loop entirely.
Akzeptierte Antwort
Star Strider
am 15 Sep. 2014
I can’t run your code, but one item that would seem to be a problem is:
distance = sqrt((distance^ 2) + (height^2));
velocity = distance/0.1*60; % stepsize =0.1min ___speed in m/s
distance(:,k)=(distance);
velocity(:,k)=(velocity);
You’re assigning ‘distance’ and ‘velocity’ scalars and then as arrays. Won’t work. This example illustrates the same problem:
for k1 = 1:10
xt = k1^2;
xt(k1) = xt;
end
Renaming the scalar solves the problem:
for k1 = 1:10
xt2 = k1^2;
xt(k1) = xt2;
end
2 Kommentare
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Matrix Indexing finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!