正方行列を作成したい。ノードと呼ばれるこの行列があるとしましょう
1 4.3434 3.4565
2 6.2234 5.1234
3 10.4332 2.3243
4 7.36543 1.1434
ここで、列2と3は、ノードnの位置xとyを表します。
そして、その要素がノード行列のいくつかの要素であるヘッドと呼ばれる行列
2 6.2234 5.1234
3 10.4332 2.3243
この関数を作成して、ヘッドからすべてのノードの距離の行列を作成しました
function [distances] = net_dist(nodes,heads)
nnodes = length(nodes(:,1));
distances = zeros(nnodes);
for i = 1 : nnodes
for j = 1 : nnodes
if nodes(i,1) == nodes(j,1) && ismember(nodes(j,1),heads(:,1))
distances(i,j) = sqrt((nodes(i,2) - nodes(j,2))^2 + (nodes(i,3) - nodes(j,3))^2);
elseif (nodes(i,1) == nodes(j,1) || nodes(i,1) ~= nodes(j,1)) && ismember(nodes(j,1),heads(:,1))
distances(i,j) = sqrt((nodes(i,2) - nodes(j,2))^2 + (nodes(i,3) - nodes(j,3))^2);
elseif (nodes(i,1) == nodes(j,1) || nodes(i,1) ~= nodes(j,1)) && ~ismember(nodes(j,1),heads(:,1))
distances(i,j) = 1E9;
end
end
end
return;
この関数は、ヘッドからすべてのノードの距離を返す必要があります。ヘッドではないノード間の位置は、番号1E9で埋められます。sqrt値を受け取る代わりにこの関数を実行すると、すべて0を受け取る理由がわかりません。
間違いなく私はそのような同様のものを手に入れるでしょう
1 2 3 4
1 1E9 d d 1E9
2 1E9 0 d 1E9
3 1E9 d 0 1E9
4 1E9 d 0 1E9