Генерация случайной взвешенной матрицы смежности в 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 извлечь только половину матрицы.
Другие вопросы по тегам