Matlab中的经度、纬度和距离

Matlab中的经度、纬度和距离,matlab,for-loop,coordinate,Matlab,For Loop,Coordinate,我的矩阵datamat具有X-Y坐标: -80.26 40.11 -80.44 40.24 -80.29 40.49 -80.45 40.48 -80.55 40.90 -80.32 40.19 我必须计算所有对的距离,它们的数量是6*5/2=15。距离就是sqrt((x_i-x_j)^2+(y_i-y_j)^2)。如何创建存储这15个距离值的向量?谢谢。这里有两种可能的解决方案。第一个使用单个循环,但在该构造中相当有效。第二个是无循环的,但需要分配额外的矩阵A。我在这两个方面都做了一些定时运

我的矩阵datamat具有X-Y坐标:

-80.26 40.11
-80.44 40.24
-80.29 40.49
-80.45 40.48
-80.55 40.90
-80.32 40.19

我必须计算所有对的距离,它们的数量是6*5/2=15。距离就是sqrt((x_i-x_j)^2+(y_i-y_j)^2)。如何创建存储这15个距离值的向量?谢谢。

这里有两种可能的解决方案。第一个使用单个循环,但在该构造中相当有效。第二个是无循环的,但需要分配额外的矩阵
A
。我在这两个方面都做了一些定时运行(见下文),无循环解决方案的性能最好

%# Your matrix
M = [-80.26 40.11;
     -80.44 40.24;
     -80.29 40.49;
     -80.45 40.48;
     -80.55 40.90;
     -80.32 40.19];

%# Get the indices of all combinations
I1 = combnk(1:size(M, 1), 2);
T = size(I1, 1);

%# Loop-based solution
Soln1 = nan(T, 1);
for n = 1:T
    Soln1(n) = sqrt((M(I1(n, 1), 1) - M(I1(n, 2), 1))^2 + (M(I1(n, 1), 2) - M(I1(n, 2), 2))^2);
end 

%# Loop-less but requires the creation of matrix A
A = M(I1', :);
A = A(2:2:end, :) - A(1:2:end, :);
Soln2 = sqrt(sum(A.^2, 2));
对于具有100行的随机矩阵
M
,我对每个解决方案执行了1000次迭代。结果是:

Elapsed time is 0.440229 seconds. %# Loop based solution
Elapsed time is 0.168733 seconds. %# Loop-less solution

无环解决方案似乎是赢家。

这里有两种可能的解决方案。第一个使用单个循环,但在该构造中相当有效。第二个是无循环的,但需要分配额外的矩阵
A
。我在这两个方面都做了一些定时运行(见下文),无循环解决方案的性能最好

%# Your matrix
M = [-80.26 40.11;
     -80.44 40.24;
     -80.29 40.49;
     -80.45 40.48;
     -80.55 40.90;
     -80.32 40.19];

%# Get the indices of all combinations
I1 = combnk(1:size(M, 1), 2);
T = size(I1, 1);

%# Loop-based solution
Soln1 = nan(T, 1);
for n = 1:T
    Soln1(n) = sqrt((M(I1(n, 1), 1) - M(I1(n, 2), 1))^2 + (M(I1(n, 1), 2) - M(I1(n, 2), 2))^2);
end 

%# Loop-less but requires the creation of matrix A
A = M(I1', :);
A = A(2:2:end, :) - A(1:2:end, :);
Soln2 = sqrt(sum(A.^2, 2));
对于具有100行的随机矩阵
M
,我对每个解决方案执行了1000次迭代。结果是:

Elapsed time is 0.440229 seconds. %# Loop based solution
Elapsed time is 0.168733 seconds. %# Loop-less solution

无循环解决方案似乎是赢家。

我在过去10分钟内编辑了大约20次答案:-)我想我现在得到了合理的最佳答案。干杯。你在计算地球表面的距离吗?如果是这样的话,标准的欧几里得距离公式就不会累积。看看这个:谢谢大家。正如slayton所建议的,我必须看看“pos2dist”函数。如果我不能在科林的代码上使用这个函数,我会问更多的问题。@slayton胡说八道。只有傻瓜和异教徒才相信地球表面是弯曲的……在过去的10分钟里,我把答案编辑了大约20次:-)我想我现在得到了一些合理的最佳答案。干杯。你在计算地球表面的距离吗?如果是这样的话,标准的欧几里得距离公式就不会累积。看看这个:谢谢大家。正如slayton所建议的,我必须看看“pos2dist”函数。如果我不能在科林的代码上使用这个函数,我会问更多的问题。@slayton胡说八道。只有傻瓜和异教徒才相信地球表面是弯曲的。。。