Я хотел бы создать случайную матрицу смежности в MATLAB, чтобы общая сумма весов была равна количеству ребер. Наконец, найдите матрицу Лапласа, используя
L = diag(sum(A)) - A
а потом графически. Есть ли способ сделать это? Заранее спасибо.
Я хотел бы создать случайную матрицу смежности в MATLAB, чтобы общая сумма весов была равна количеству ребер. Наконец, найдите матрицу Лапласа, используя
L = diag(sum(A)) - A
а потом графически. Есть ли способ сделать это? Заранее спасибо.
Матрица смежности для неориентированного графа — это просто квадратная симметричная матрица.
Если у вас нет ограничений на степень узлов только для весов, я бы предложил что-то вроде
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
, чтобы извлечь только половину матрицы.