Filter löschen
Filter löschen

How to use a function for multiple sets of numbers with a single command?

2 Ansichten (letzte 30 Tage)
For instance, I created a function to calculate the distance between 2 points with X,Y coordinates with this formula:
D=sqrt((X1-X2)^2+(Y1-Y2)^2)
Point nb. X Y
and I have this matrix: A = 1 2800 3500
2 4200 5300
3 5100 6200
- - -
- - -
n x y
The dimension of matrix A is ,,n" rows and 2 columns
Now, how I can apply this function to calculate distances between points 1&2, 2&3, 3&4 and so on, with a single command?Is it possible?
*Note: English is not my first language, and I may have not been very explicit

Akzeptierte Antwort

Andrei Bobrov
Andrei Bobrov am 3 Apr. 2013
Bearbeitet: Andrei Bobrov am 3 Apr. 2013
k = diff(A);
D = hypot(k(:,1),k(:,2)); % I am corrected after Sean's comment.
On Ciuban's comment.
Try used function pdist from Statistics Toolbox:
A = [2800 3500
4200 5300
5100 6200];
D = pdist(A);
  4 Kommentare
Mahdi
Mahdi am 3 Apr. 2013
Look at my answer and where ever you see A(2:end) and A(1:end) changes how far you want to go.
For example, if you want 1&4 and 2&4, you would use A(4:end) and A(2:end-4) respectively. Try to explore the colon operator and see what it does. For example, try the following
A=[1 2 3; 4 5 6; 7 8 9];
A(1:2:end, 1)
A(1:3:end)
A(1, 1:2:end)
A(1:3,1)
Matt Kindig
Matt Kindig am 3 Apr. 2013
Ciuban, if you want every combination, it sounds like you want to calculate the inter-point distance matrix. This can get very memory-intensive if done poorly/naively, so I'd recommend using one of the File Exchange solutions for this. I'd recommend:
href = ""<http://www.mathworks.com/matlabcentral/fileexchange/18937-ipdm-inter-point-distance-matrix</a>>

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Mahdi
Mahdi am 3 Apr. 2013
Bearbeitet: Mahdi am 3 Apr. 2013
D=sqrt((A(2:end,2)-A(1:end-1,2)).^2+(A(2:end,3)-A(1:end-1,3)).^2)
  5 Kommentare
Sebastian Ciuban
Sebastian Ciuban am 3 Apr. 2013
the dimension of A is ,,n" rows and 2 columns
Matt Kindig
Matt Kindig am 3 Apr. 2013
Then you can just modify Mahdi's code as:
D=sqrt((A(2:end,2)-A(1:end-1,2)).^2+(A(2:end,1)-A(1:end-1,1)).^2)

Melden Sie sich an, um zu kommentieren.

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!

Translated by