2009-12-16 38 views
-1

在下面的Matlab代码中,使用节点N=10,您将以概率P= .25将随机选取的节点标记为红色节点。Matlab,找到不参与边缘的节点?

nodeN = []; 
nodeM = []; 
N=input('No. of Nodes:'); 
P=input('probability of cluster head : '); 
R=input('range of cluster head: ') 
data = rand(N,2) % Randomly generated n no. of nodes 
x = data(:,1); 
y = data(:,2); 
plot(x,y,'b*') 
hold on 
index = (rand(N,1) <= P);  %# to choose cluster head out of N nodes with probability P 
selected = data(index,:) % nodes which are now cluster head 
length(selected)   % no. of nodes which are cluster head 
not_selected = data(~index,:) % remaining nodes which would be cluster members(out of N nodes) 
length(not_selected)   % no. of remaining nodes 
plot(x(index),y(index),'r*'); % cluster head will be colored red in figure 

for i=1:length(selected); 
for j=1:length(not_selected); 
dist_ij = sqrt(sum((selected(i,:)- not_selected(j,:)).^2)) % distance between selected cluster heads and remaining nodes 
if(dist_ij<=R) 
     nodeN = [nodeN; selected(i,:)] 
    nodeM = [nodeM; not_selected(j,:)] 
end; 
end; 
end; 

if size(nodeN,1)~=0 && size(nodeN,2)~=0 && size(nodeM,1)~=0 && size(nodeM,2)~=0 
X1=[nodeN(:,1)' ; nodeM(:,1)'] 
Y1=[nodeN(:,2)' ; nodeM(:,2)'] 
plot(X1,Y1) 
hold on 
end; 

如何找到它们不在范围内,不要使用红色节点中的任意边缘并绘制这些节点绿色那些剩余的蓝色节点矩阵?

回答

1

好吧,这不是很有效,但我认为它的工作原理。 我还将length(selected)更改为size(selected, 1)(与not_selected相同),因为当您只有一个选定(或未选定)节点时,它无法工作。

nodeN = []; 
nodeM = []; 
N=input('No. of Nodes:'); 
P=input('probability of cluster head : '); 
R=input('range of cluster head: ') 
data = rand(N,2) % Randomly generated n no. of nodes 
x = data(:,1); 
y = data(:,2); 
plot(x,y,'b*') 
hold on 

index = (rand(N,1) <= P); %# to choose cluster head out of N nodes with probability P 
selected = data(index,:) % nodes which are now cluster head 
length(selected) % no. of nodes which are cluster head 
not_selected = data(~index,:) % remaining nodes which would be cluster members(out of N nodes) 
length(not_selected) % no. of remaining nodes 
plot(x(index),y(index),'r*'); % cluster head will be colored red in figure 

bitar = zeros([1 length(not_selected)]); 
for i=1:size(selected, 1); 
    for j=1:size(not_selected, 1); 
    dist_ij = sqrt(sum((selected(i,:)- not_selected(j,:)).^2)) % distance between selected cluster heads and remaining nodes 
    if(dist_ij<=R) 
     nodeN = [nodeN; selected(i,:)] 
     nodeM = [nodeM; not_selected(j,:)] 
     bitar(j) = 1; 
    end; 
    end; 
end; 

if size(nodeN,1)~=0 && size(nodeN,2)~=0 && size(nodeM,1)~=0 && size(nodeM,2)~=0 
    X1=[nodeN(:,1)' ; nodeM(:,1)'] 
    Y1=[nodeN(:,2)' ; nodeM(:,2)'] 
    plot(X1,Y1) 
    hold on 
end; 

for i=1:length(bitar) 
    if bitar(i) == 0 
    plot(not_selected(i, 1), not_selected(i, 2), 'g*'); 
    end; 
end; 
+0

非常感谢我的朋友,它工作正常 – gurwinder 2009-12-16 12:24:05

+0

它解决了我的问题,但你能告诉我这个bitar在代码中做了什么? – gurwinder 2009-12-16 18:00:16