【问题标题】:Generating random weighted adjacency matrix in MATLAB在 MATLAB 中生成随机加权邻接矩阵
【发布时间】:2013-02-04 10:39:39
【问题描述】:

我想在 MATLAB 中创建一个随机邻接矩阵,使得权重的总和等于边数。最后使用

找到拉普拉斯矩阵
L = diag(sum(A)) - A

然后绘制它。有什么办法吗? 提前致谢。

【问题讨论】:

  • 听起来像是功课。你到底在努力解决哪个部分?邻接矩阵的创建、拉普拉斯矩阵的计算还是作图?
  • 有向图?无向图?节点度数?边数?
  • 感谢您的回复。 @Arik,它以某种方式引导我写一个学期项目。我实际上不知道如何创建一个随机加权邻接矩阵,以使总权重等于图中的边数。然后可能其中一些的权重大于其他 1 个的权重。剩下的很容易找到拉普拉斯矩阵,图,...。 @Shai,假设它是无向的,我们可以通过知道邻接矩阵的一行中有多少非零条目来找到度节点。对我来说主要问题是我上面提到的。

标签: matlab random sparse-matrix adjacency-matrix


【解决方案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 只提取一半矩阵。

【讨论】: