2012-09-24 126 views
2

我想構建一個矩形矩陣。讓我們假設我們有這個矩陣稱爲節點構建矩陣從另一個矩陣開始

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

其中列2和3代表節點的位置x及Y n

和矩陣叫頭,其中它的元素是節點矩陣的一些元素

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編號填充。我不明白爲什麼當我執行此功能,而不是接受開方值我收到的所有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 

回答

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