我想构建一个方阵。我们假设我们有一个名为nodes
的矩阵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
和一个名为head的矩阵,其元素是节点矩阵的一些元素
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
答案 0 :(得分:3)
你没有得到零,你得到正确的距离。你可能认为你得到零,因为1e9是一个很大的值,当你尝试打印你的矩阵时你会得到
distances =
1.0e+09 *
1.0000 0.0000 0.0000 1.0000
1.0000 0 0.0000 1.0000
1.0000 0.0000 0 1.0000
1.0000 0.0000 0.0000 1.0000
您可以看到两个0条目为真零,而其他0个条目在昏迷后大约为0到4个数字。尝试打印其中一个矩阵元素,看它们不是零
distances(1,2)
ans =
2.5126
您还可以使用nnz
功能快速了解您拥有的非零数量
nnz(distances)
ans =
14