how can I wired two edges and replace it in an adjacency matrix
1 回表示 (過去 30 日間)
古いコメントを表示
clc;
clear all;
n = 10;
C= zeros(n, n);
C(1,n)=1;
C(1,n-1)=1;
C(2,n)=1;
A = zeros(n, n);
for i = 1:n
for j = 1:n
if j==i+1 || j == i + 2
A(i,j) = 1;
else
A(i, j) = 0;
end
end
end
B1=A+C;
B=B1+B1';
disp(B);
Here matrix is
0 件のコメント
回答 (1 件)
Vinay
2024 年 8 月 7 日
編集済み: Vinay
2024 年 8 月 7 日
Hello mks,
To rewire an adjacency matrix by replacing two edges at random in MATLAB, the "randperm" function can be used for selection.
An adjacency matrix represents a finite graph where matrix elements indicate vertex adjacency. The "randperm(n)" function generates a random permutation of integers from 1 to "n", and "randperm(n,k)" selects "k" unique integers randomly from 1 to "n".
Identify unconnected pairs of nodes in the adjacency matrix and use "randperm" to randomly select two pairs. Then, update the adjacency matrix by using the selected edges to reflect the rewired connections. This process ensures a random yet systematic modification of the graph structure.
For more information about the MATLAB function “randperm,” you can utilize the documentation link provided below: https://www.mathworks.com/help/matlab/ref/randperm.html
% given intial adjacency matrix B we can extract the current edges
[row,col] = find(B ==1)
current_edges = [row,col]
% Get the indices of potential new edges
[row, col] = find(B == 0);
possible_edges = [row, col];
% Exclude self-loops in the edges
possible_edges = possible_edges(row ~= col, :);
% Randomly select two new edges to add
new_edges = possible_edges(randperm(size(possible_edges, 1), 2), :)
% utilize for loop to update the adjaceny matrix
for i = 1:2
B(new_edges(i,1),new_edges(i,2)) = 1;
B(new_edges(i,2),new_edges(i,1)) = 1;
end
0 件のコメント
参考
カテゴリ
Help Center および File Exchange で Construction についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!