带有拉普拉斯矩阵的分区图
此示例显示了如何使用图形的拉普拉斯矩阵来计算Fiedler载体。Fiedler矢量可用于将图表分为两个子图。
加载数据
加载数据集Barbellgraph.mat
,其中包含杠铃图的稀疏邻接矩阵和节点坐标。
加载Barbellgraph.mat
绘图图
使用自定义节点坐标绘制图形xy
。
g =图(a,“省略自助”);p =图(g,'xdata',xy(:,1),'ydata',xy(:,2),“标记”,,,,'。');轴平等的
计算Laplacian矩阵和Fiedler载体
计算图的拉普拉斯矩阵。然后,使用使用的两个最小特征值和相应的特征向量计算特征
。
l = laplacian(g);[v,d] = eigs(l,2,“ Smallestabs”);
Fiedler载体是对应于图的第二小特征值的特征向量。这最小特征值为零,表明该图具有一个连接的组件。在这种情况下,第二列在v
对应于第二小的特征值D(2,2)
。
d
d =2×210-3×0.0000 0 0 0.2873
w = v(:,2);
使用特征
由于仅计算出特征值和特征向量的一个子集,因此可以扩展到较大的图形,但是对于较小的图,将Laplacian矩阵转换为完整存储并使用,同样可行eig(full(l))
。
分区图
使用fiedler矢量将图表分为两个子图w
。如果节点在子图中分配给A子图A。w
。否则,将节点分配给子图B。此练习称为签名或者零阈值削减。符号切割可以最大程度地减少切割的重量,但要受图表的任何非平凡切割的重量的上限和下限。
使用符号切割对图进行分区。突出显示节点的子图W> = 0
红色,节点与W <0
黑色。
突出显示(p,查找(w> = 0),'nodeColor',,,,'r')%子图突出显示(p,查找(w <0),'nodeColor',,,,'K')%子图b
对于Bar Bell图,此分区将图形分为两个相等的节点集。但是,剪切并不总是会产生平衡的切割。
始终可以通过计算中位数来划分图w
并将其用作阈值。此分区称为中间剪裁,并且保证每个子图中的节点数量相等。
您可以首先将值转换为中位数w
由中位数:
w_med = w-中值(w);
然后,通过登录划分图表w_med
。对于Bar Bell图,中位数w
接近零,因此两个切割产生了相似的两种序列。