这个例子展示了如何使用图的拉普拉斯矩阵来计算Fiedler向量。Fiedler向量可以用来将图划分为两个子图。
加载数据集杠铃垫
,它包含barbell图的稀疏邻接矩阵和节点坐标。
负载杠铃垫
使用自定义节点坐标绘制图形xy
.
G=图(A,“省略自循环”); p=曲线图(G,“扩展数据”,xy(:,1),“伊达塔”,xy(:,2),“标记”,'.'); 轴相同的
计算出图的拉普拉斯矩阵,然后利用该矩阵计算出两个最小的幅值特征值和相应的特征向量EIG
.
L=拉普拉斯(G);[V,D]=EIG(L,2,“小庄园”);
Fiedler向量是对应于图的第二小特征值的特征向量最小的特征值为零,表示图中有一个连接的组件v
对应于第二个最小的特征值D(2,2)
.
D
D=2×210-3× 0.0000 0 0 0.2873
w=V(:,2);
使用EIG
由于只计算特征值和特征向量的子集,因此可扩展到较大的图,但对于较小的图,将拉普拉斯矩阵转换为完全存储和使用也是同样可行的eig(全(L))
.
使用Fiedler向量将图划分为两个子图W
.如果子图A中的某个节点具有正值,则将该节点分配给该子图AW
。否则,该节点将分配给子图B。这种做法称为a标志切割或零阈值切割符号割最小化割的权重,受图中任何非平凡割权重的上下界的约束。
使用符号切割对图形进行分区。突出显示具有w> =0
以红色显示,并且具有w<0
黑色的。
突出显示(p,查找(w>=0),“NodeColor”,“r”)%子图A突出显示(p,查找(w<0),“NodeColor”,“k”)%子图B
对于bar-bell图,此分区将图很好地平分为两组相等的节点。但是,符号割并不总是产生平衡割。
通过计算图的中位数,总是可以将图平分W
并将其用作阈值。这个分区称为中央切口,并保证每个子图中的节点数相等。
可以通过首先移动中的值来使用中间切割W
按中位数计算:
w_med=w-中值(w);
然后,通过登录对图进行分区w_med
.对于条形图,中位数W
接近于零,因此两个切割产生相似的对分。