How do I write a for loop to calculate the difference between two points?
    16 Ansichten (letzte 30 Tage)
  
       Ältere Kommentare anzeigen
    
    S.
 am 24 Okt. 2013
  
    
    
    
    
    Bearbeitet: Randy Souza
    
 am 24 Okt. 2013
            Here's what I have so far:
% Write a program using a for loop to get user input for a nX2 array, then find the difference between point 1 and the rest.
n=input('how many points do you have? ');
A=zeros (n,2);
for row=1:n
   for column=1:2
        usernumber=input('enter a number: ');
        A(row, column)=usernumber;
    end
end
A
for row=1:length(A(n,2))
    Dist=sqrt((A(n,1)-A(n+1,1))^2)+((A(n+1,2)-A(n,2))^2)
end
Dist
I'm not sure how to find the differences through the loop and then store them
0 Kommentare
Akzeptierte Antwort
  Andrei Bobrov
      
      
 am 24 Okt. 2013
        
      Bearbeitet: Andrei Bobrov
      
      
 am 24 Okt. 2013
  
      Dist = zeros(size(A,1),1);
for jj = 2:numel(Dist)
    Dist(jj) = sqrt(sum((A(jj,:) - A(1,:)).^2,2));
end
or
Dist = sqrt(bsxfun(@minus,A,A(1,:)).^2*[1;1]);
or
A1 = num2cell(bsxfun(@minus,A,A(1,:)),1);
Dist = hypot(A1{:});
3 Kommentare
Weitere Antworten (2)
  Michael
      
 am 24 Okt. 2013
        Try using cell arrays by using something like:
for row =1:n
    for col =1:2
        dist{row,col} = ... %pythogrean thm
    end
end 
% Define, by hand, as it would be zero (I think)
dist{1,1} = 1;
Good Luck
  Simon
      
 am 24 Okt. 2013
        Hi!
You store your entered user input in a matrix, say N. As you wrote N is of dimension n*2.
The distance of a point from the first one is like you wrote
d=sqrt((x2-x1)^2+(y2-y1)^2)
You can write a loop to calculate this
for p = 1:n
  d(p) = sqrt((N(n,1)-N(1,1))^2+(N(n,2)-N(1,2))^2)
end
This gives you the distance from each point to the first one, with "d(0) = 0" of course.
1 Kommentar
  Simon
      
 am 24 Okt. 2013
				One comment to my solution: try to avoid loops! Matlab is best used with matrix calculations. Rewrite the loop like this:
% create matrix as big as N, with only the first point in all lines
Nfirst = ones(n,1) * N(1,:);
% create the difference (in x and y) between all point to the first one
Ndiff = N - Nfirst;
% take the square of each difference (this is x^2 and y^2)
Nsquare = Ndiff.^2;
% sum along dimension 2 (this is x^2+y^2)
Nsum = sum(Nsquare, 2);
% take the square root
d = sqrt(Nsum)
Or write it in one row
d =  sqrt(sum((N-(ones(n,1) * N(1,:))).^2, 2));
Siehe auch
Kategorien
				Mehr zu Loops and Conditional Statements 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!



