Network adjacency matrix for connecting n node with probability p
    5 次查看(过去 30 天)
  
       显示 更早的评论
    
i have write this but is not running 
clc;
clear all
n=10;
p=0.4;
adj_matrix = generate_adjacency_matrix(n, p)
function adj_matrix = generate_adjacency_matrix(n, p)
% Initialize an n x n matrix with all zeros
adj_matrix = zeros(n, n);
% Loop through all possible node pairs
for i = 1:n
    for j = 1:n
        % Skip diagonal elements (no self-loops)
        if i == j
            continue;
        end
        % Generate a random number between 0 and 1
        random_number = rand();
        % If the random number is less than p, add a link between nodes i and j
        if random_number < p
            adj_matrix(i, j) = 1;
            adj_matrix(j, i) = 1; % Since it's an undirected network
        end
    end
end
end
1 个评论
回答(3 个)
  Torsten
      
      
 2023-7-30
        
      编辑:Torsten
      
      
 2023-7-30
  
      clc;
clear all
n=10;
p=0.4;
adj_matrix = generate_adjacency_matrix(n, p)
(nnz(adj_matrix(:))-n)/(n^2-n)
function adj_matrix = generate_adjacency_matrix(n, p)
% Initialize an n x n matrix with all zeros
adj_matrix = eye(n);
% Loop through all possible node pairs
for i = 1:n-1
    for j = i+1:n       
        % Generate a random number between 0 and 1
        random_number = rand();
        % If the random number is less than p, add a link between nodes i and j
        if random_number < p
            adj_matrix(i, j) = 1;
            adj_matrix(j, i) = 1; % Since it's an undirected network
        end
    end
end
end
2 个评论
  Torsten
      
      
 2023-7-30
				Seems the matrix always has zeros on the diagonal:
rng("default")
n=10;
p=0.4;
adj_matrix = generate_adjacency_matrix(n, p);
nnz(adj_matrix(:))/(n^2-n)
function adj_matrix = generate_adjacency_matrix(n, p)
% Initialize an n x n matrix with all zeros
adj_matrix = zeros(n);
% Loop through all possible node pairs
for i = 1:n-1
    for j = i+1:n       
        % Generate a random number between 0 and 1
        random_number = rand();
        % If the random number is less than p, add a link between nodes i and j
        if random_number < p
            adj_matrix(i, j) = 1;
            adj_matrix(j, i) = 1; % Since it's an undirected network
        end
    end
end
end
  Bruno Luong
      
      
 2023-7-30
        
      编辑:Bruno Luong
      
      
 2023-7-30
  
      Method without loop, generate entire matrix, symmetrize then remove self-connexion
p=0.4;
n=10;
A = GenerateAMat(p, n);
A
nnz(A)/numel(A)
function A = GenerateAMat(p, n)
A = rand(n) <= 1-sqrt(max(1-p*n/(n-1),0)); 
A = A|A'; 
A(1:n+1:end)=0;
end
0 个评论
  Bruno Luong
      
      
 2023-7-30
        
      编辑:Bruno Luong
      
      
 2023-7-30
  
      Pretty similar to Torsen's solution. Adjust the density and no-loop
p=0.1;
n=30;
A = GenerateAMat2(p, n);
nnz(A)/numel(A)
function A = GenerateAMat2(p, n)
A = zeros(n);
A(triu(true(n),1)) = rand(1,n*(n-1)/2) <= p*n/(n-1);
A = A+A'; 
end
0 个评论
另请参阅
类别
				在 Help Center 和 File Exchange 中查找有关 Creating and Concatenating Matrices 的更多信息
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!


