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;
精彩评论