Генерация случайной взвешенной матрицы смежности в MATLAB
Я хотел бы создать случайную матрицу смежности в MATLAB так, чтобы общая сумма весов была равна числу ребер. Наконец, найдите матрицу Лапласа, используя
L = diag(sum(A)) - A
а затем график это. Есть ли способ сделать это? Заранее спасибо.
1 ответ
Решение
Матрица смежности для неориентированного графа - это просто квадратная симметричная матрица.
Если у вас нет ограничений по степени узлов только по весам, я бы предложил что-то вроде
n ; % number of nodes in the graph
density = 1e-3; % a rough estimate of the amount of edges
A = sprand( n, n, density ); % generate adjacency matrix at random
% normalize weights to sum to num of edges
A = tril( A, -1 );
A = spfun( @(x) x./nnz(A), A );
% make it symmetric (for undirected graph)
A = A + A.';
Я использовал в этом коде:
sprand
генерировать случайную разреженную матрицу.spfun
чтобы помочь нормализовать вес края.tril
извлечь только половину матрицы.