2

I want to build a square matrix. Let's suppose We have this matrix called nodes

1 4.3434  3.4565
2 6.2234  5.1234
3 10.4332 2.3243
4 7.36543 1.1434

where the column 2 and 3 represents position x and y of nodes n

and a matrix called heads where its elements are some elements of nodes matrix

2 6.2234 5.1234
3 10.4332 2.3243

I created this function to build the matrix of the distance of every nodes from the heads

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;

This function should return the distance of every nodes from a heads. The positions between nodes that aren't heads are filled with number 1E9. I don't understand why when I execute this function instead to receive sqrt values I receive all 0.

Definitely I would obtain such similar thing

   1   2   3   4 
 1 1E9 d   d   1E9
 2 1E9 0   d   1E9
 3 1E9 d   0   1E9
 4 1E9 d   0   1E9
4

1 回答 1

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 到 4 位。尝试打印其中一个矩阵元素,看看它们不是零

distances(1,2)

ans =

2.5126

您还可以使用nnz函数快速知道您有多少个非零

nnz(distances)

ans =

14
于 2012-09-24T08:35:02.000 回答