Генерация случайной взвешенной матрицы смежности в MATLAB

Я хотел бы создать случайную матрицу смежности в MATLAB, чтобы общая сумма весов была равна количеству ребер. Наконец, найдите матрицу Лапласа, используя

L = diag(sum(A)) - A

а потом графически. Есть ли способ сделать это? Заранее спасибо.


person Royeh    schedule 04.02.2013    source источник
comment
Звучит как домашнее задание. С какой именно частью вы боретесь? Создание матрицы смежности, расчет матрицы Лапласа или построение графика?   -  person ARF    schedule 04.02.2013
comment
ориентированный граф? неориентированный граф? степень узлов? количество ребер?   -  person Shai    schedule 04.02.2013
comment
спасибо за ответы. @ Арик, почему-то это заставляет меня писать семестровый проект. На самом деле я не знаю, как создать случайную взвешенную матрицу смежности, чтобы общие веса были равны количеству ребер в графе. Тогда некоторые из них могут иметь вес больше, чем 1, другие меньше. Остальное было бы легко найти матрицу Лапласа, график, ... . @Shai, давайте предположим, что он ненаправленный, и мы можем найти узлы степени, зная, сколько ненулевых элементов находится в строке матрицы смежности. основная проблема для меня заключается в том, что я упомянул выше.   -  person Royeh    schedule 06.02.2013


Ответы (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, чтобы извлечь только половину матрицы.
person Shai    schedule 07.02.2013