这个例子展示了稀疏矩阵的一个应用,并解释了图和矩阵之间的关系。图是具有指定连接的节点集。一个例子是巴克敏斯特-富勒测地线穹顶(也是一个足球或碳-60分子)的连通图。在MATLAB®中,测地线圆顶的图形可以用BUCKY函数生成。
工具/原料
matlab软件
电脑
方法/步骤
1、命令行窗口键入:%Definethevariables饱终柯肢.[B,V]=bucky;H=sparse(60,60);k=31:60;H(k,k)=B(k,k);%Visu锾攒揉敫alizethevariables.gplot(B-H,V,'b-');holdongplot(H,V,'r-');holdoffaxisoffequal
2、按”Enter“键。如图1所示。
3、一稍僚敉视个图可以用它的邻接矩阵来表示。为了构造邻接矩阵,将节点编号为1到N。如果节点i连接到节点j,则将矩阵的元素(i,j)设置为1,否则设置为0。命令行窗口键入:%Defineam锾攒揉敫atrixA.A=[0110;1001;1001;0110];%Drawapictureshowingtheconnectednodes.clasubplot(1,2,1);gplot(A,[01;11;00;10],'.-');text([-0.2,1.2-0.2,1.2],[1.2,1.2,-.2,-.2],('1234')',...'HorizontalAlignment','center')axis([-12-12],'off')%Drawapictureshowingtheadjacencymatrix.subplot(1,2,2);xtemp=repmat(1:4,1,4);ytemp=reshape(repmat(1:4,4,1),16,1)';text(xtemp-.5,ytemp-.5,char('0'+A(:)),'HorizontalAlignment','center');line([.2500.25NaN3.75443.75],[0044NaN0044])axisofftight
4、按”Enter“键。如图2所示。
5、这里的节点在一个半球擢爻充种的巴克球,编号多边形的多边形。命令行窗口键入:subplot(1,1,1);gplot烫喇霰嘴(B(1:30,1:30),V(1:30,:),'b-');forj=1:30,text(V(j,1),V(j,2),int2str(j),'FontSize',10);endaxisoffequal
6、按”Enter“键。如图3所示。
7、为了可视化这个半球的邻接矩阵,我们使用SPY函数来绘制非零元素的轮廓。注意,矩阵是对称的,因为如果节点i连接到节点j,那么节点j连接到节点i。命令行窗口键入:spy(B(1:30,1:30))title('spy(B(1:30,1:30))')
8、按”Enter“键。如图4所示。
9、现螅岔出礤在我们通过将一个半球的编号映射到另一个半球,将我们的编号方案扩展到整个图形。命令行键入:[B,V]=bucky;H=sparse(60,60);k=31:60;H(娱浣嫁装k,k)=B(k,k);gplot(B-H,V,'b-');holdongplot(H,V,'r-');forj=31:60text(V(j,1),V(j,2),int2str(j),...'FontSize',10,'HorizontalAlignment','center');endholdoffaxisoffequal
10、按”Enter“键。如图5所示。
11、最后,这里是最终稀疏矩阵的间谍图。命令行键入:spy(B)title('spy(B)')
12、按”Enter“键。如图6所示。
13、在许多有用的图中,每个节点只连接到少数其他节点。因此,邻接矩阵每行只包含几个非零项。这个例子展示了一个稀疏矩阵有用的地方。命令行窗口键入:gplot(B-H,V,'b-');axisoffequalholdongplot(H,V,'r-');holdoff
14、按”Enter“键。如图7所示。