Matlab, найти узлы, которые не участвуют в ребрах? - PullRequest
0 голосов
/ 16 декабря 2009

В следующем коде Matlab с узлами N=10 вы получите случайно выбранные узлы с вероятностью, скажем, P= .25, помеченные как красные узлы.

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 Ответ

1 голос
/ 16 декабря 2009

Хорошо, это не очень эффективно, но я думаю, что это работает. Я также изменил 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...