1

我遇到了一个使用 Matlab 脚本的旅行推销员解决方案,在它的代码中,我发现它使用了一个名为 City Coordinates 的表示,它看起来像:

CityCood = [0.4000,0.2439,0.1707,0.2239,0.5171;0.4439,0.1463,0.2293,0.7610,0.9414]

5个城市。

在这一点上,我真的不知道作者是如何得到这个表示的,因为从我目前看到的情况来看,手头的信息应该是一个 5*5 对称矩阵,表示这五个城市中任意两个城市之间的距离。

因此,如果有人能给我一个关于基于坐标的表示如何工作的想法,我将不胜感激。提前致谢。

4

2 回答 2

5

CityCoord(我认为缺少一个字母)是一个 2×5 数组。我假设这意味着CityCoord每个城市都包含两个坐标 (x,y)。

要创建一个 5×5 距离矩阵,您可以调用

squareform(pdist(CityCoord'))
于 2010-11-29T17:32:36.493 回答
3

如果您没有统计工具箱,@Jonas提供的用于计算欧几里德距离的解决方案的等效形式是:

%# dist(u,v) = norm(u-v) = sqrt(sum((u-v).^2))
D = cell2mat( arrayfun( ...
    @(i) sqrt( sum( bsxfun(@minus, CityCoord, CityCoord(:,i)).^2 ) ), ...
    (1:size(CityCood,2))', ...
    'UniformOutput',false) );

否则,我们可以使用这个事实||u-v||^2 = ||u||^2 + ||v||^2 - 2*u.v来实现更快的向量化代码:

X = sum(CityCoord.^2);
D = real( sqrt(bsxfun(@plus,X,X')-2*(CityCoord'*CityCoord)) );
于 2010-11-29T19:38:21.997 回答