- https://www.mathworks.com/help/matlab/ref/round.html
- https://www.mathworks.com/help/matlab/ref/graph.numnodes.html
- https://www.mathworks.com/help/matlab/ref/graph.degree.html
Generating a random graph with given average(mean) degree of nodes
11 次查看(过去 30 天)
显示 更早的评论
I want to generate a random graph (undirected without self-loop) with input average(mean) degree of nodes.
For example, with given (avg degree = 3 & n = 10), I want to have a randomly generated graph with 10 by 10 adjacency matrix and avg degree of 3.
Can anyone assit me on this please?
0 个评论
回答(1 个)
Paras Gupta
2023-9-14
Hi,
I understand that you want to generate the adjacency matrix for a random undirected graph with an average degree given as input. Please refer to the code below to achieve the same.
adj = generateRandomGraph(10, 3)
G = graph(adj);
numNodes = numnodes(G)
avgDegree = mean(degree(G))
function adjacencyMatrix = generateRandomGraph(n, avgDegree)
% Create an empty adjacency matrix
adjacencyMatrix = zeros(n, n);
% Calculate the maximum number of edges allowed
maxEdges = n * (n - 1) / 2;
% Calculate the desired number of edges
numEdges = round(n * avgDegree / 2);
% Check if the desired number of edges is valid
if numEdges > maxEdges
error('Invalid average degree. Too high for the number of nodes.');
end
% Generate random edges until reaching the desired number
while numEdges > 0
% Generate two random nodes
node1 = randi(n);
node2 = randi(n);
% Check if the edge already exists or if it's a self-loop
if adjacencyMatrix(node1, node2) == 0 && node1 ~= node2
% Add the edge
adjacencyMatrix(node1, node2) = 1;
adjacencyMatrix(node2, node1) = 1;
% Decrease the number of remaining edges
numEdges = numEdges - 1;
end
end
end
Please refer to the following documentations for more information on the functions used in the code above:
Hope this helps.
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Graph and Network Algorithms 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!