我正在尝试计算一个图的拉普拉斯矩阵。我已经计算了邻接矩阵的稀疏表示,它存储在一个维度为Nx3的文本文件中。N节点的大小(第i个节点的第j个节点的权重)。我在Matlab中打开这个文件与adj = spconvert(adj);
。下一步是计算这个稀疏矩阵的度矩阵,以执行L = D - adj
操作。如何计算度矩阵有一个输入的稀疏邻接矩阵的图?为了计算度矩阵,我计算每个节点的度:
for i=1:n % size of the node
degree(i) = length(find(adj(:,1) == i & adj(:,3) == 1));
end
但是,我怎么做D和A的减法呢?
使用spdiag函数将度向量转换为稀疏对角矩阵。然后用对角矩阵减去邻接矩阵得到拉普拉斯矩阵。使用代码的示例:
adj = spconvert(adj);
for i=1:size(adj, 1)
degree(i) = CalcDegree(adj, i)
end
D = spdiags(degree, 0, size(adj, 1), size(adj, 2));
L = D - adj;
顺便说一下,计算节点度的代码可能不正确。