tags:

views:

37

answers:

1

if you run following code with nodes N=10, you will get randomly picked few nodes with probability say P= .25 and marked as red nodes, then in, for loop every red colored node checking distance with remaining blue colored nodes.if distance is less than or equal to R say R =.2, Then it will plot edge between that red colored node and blue colored node,

now question is how to find matrix of those remaining blue colored nodes which are not in range and do not making any edge with red colored nodes and plot those nodes green?

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  A: 

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;
3lectrologos
thanks a lot my friend, it works fine
gurwinder
it solved my prob but can u please tell me what does this bitar is doing in code?
gurwinder

related questions