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

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

对于5个城市。

在这一点上,我对作者如何获得这种表示真的很不明确,因为从我到目前为止所看到的,手头的信息应该是一个5*5对称矩阵,代表这五个城市中任何两个城市之间的距离。

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

有帮助吗?

解决方案

CityCoord (我认为缺少一封信)是一个2 x-5阵列。我认为这意味着CityCoord 每个城市都包含两个坐标(x,y)。

要创建一个5 x-5距离矩阵,您可以致电

squareform(pdist(CityCoord'))

其他提示

如果您没有统计工具箱,则是与解决方案相同的形式 @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)) );
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top