开发者

Matlab, find nodes which are not participating in edges?

In the following Matlab code, with nodes N=10, you will get randomly picked nodes with probability say P= .25 marked as red nodes.

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 clu开发者_如何学编程ster 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;

How do I find a matrix of those remaining blue colored nodes which are not in range and do not make any edge with red colored nodes and plot those nodes green?


Ok, it's not very efficient, but I think it works. I also changed length(selected) to size(selected, 1) (and the same with not_selected), because your way it didn't work when you had only one selected (or not_selected) node.

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜