Effacer les filtres
Effacer les filtres

How do I write a for loop to calculate the difference between two points?

7 vues (au cours des 30 derniers jours)
S.
S. le 24 Oct 2013
Modifié(e) : Randy Souza le 24 Oct 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

Réponse acceptée

Andrei Bobrov
Andrei Bobrov le 24 Oct 2013
Modifié(e) : Andrei Bobrov le 24 Oct 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 commentaires
Andrei Bobrov
Andrei Bobrov le 24 Oct 2013
Thank you Simon! I corrected.
S.
S. le 24 Oct 2013
Modifié(e) : S. le 24 Oct 2013
thanks everyone for your help. Andrei's answer was the one that worked for my application.
S.

Connectez-vous pour commenter.

Plus de réponses (2)

Michael
Michael le 24 Oct 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
  1 commentaire
S.
S. le 24 Oct 2013
so my distance formula:
d=sqrt((x2-x1)^2+(y2-y1)^2)
what would I call x2,x1, y2,y1? maybe row(n) and column(x)?
or would the for loop take care of the rows and columns?
thanks

Connectez-vous pour commenter.


Simon
Simon le 24 Oct 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 commentaire
Simon
Simon le 24 Oct 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));

Connectez-vous pour commenter.

Catégories

En savoir plus sur Logical dans Help Center et File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by