www.gusucode.com > matlab 案例源码 matlab代码程序 > matlab/ClosenessAndBetweennessOfMinnesotaRoadsExample.m
%% Closeness and Betweenness of Minnesota Roads % Load the data in |minnesota.mat|, which contains a graph object |G| % representing the network of roads in Minnesota. The graph nodes have _xy_ % coordinates contained in the |XCoord| and |YCoord| variables of the % |G.Nodes| table. load(fullfile(matlabroot,'examples','matlab','minnesota.mat')) xy = [G.Nodes.XCoord G.Nodes.YCoord]; %% % Add edge weights to the graph that roughly correspond to the length of % the roads, calculated using the Euclidean distance between the _xy_ % coordinates of the end nodes of each edge. [s,t] = findedge(G); G.Edges.Weight = hypot(xy(s,1)-xy(t,1), xy(s,2)-xy(t,2)); %% % Plot the graph using the _xy_ coordinates for the nodes. p = plot(G,'XData',xy(:,1),'YData',xy(:,2),'MarkerSize',5); title('Minnesota Road Network') %% % Compute the closeness centrality of each node. Scale the node color % |NodeCData| to be proportional to the centrality score. ucc = centrality(G,'closeness'); p.NodeCData = ucc; colormap jet colorbar title('Closeness Centrality Scores - Unweighted') %% % Also compute the weighted closeness centrality score, using the edge % weights as the cost of traversing each edge. Using the road lengths as % edge weights improves the score quality, since distances are now measured % as the sum of the lengths of all traveled edges, rather than the number % of edges traveled. wcc = centrality(G,'closeness','Cost',G.Edges.Weight); p.NodeCData = wcc; title('Closeness Centrality Scores - Weighted') %% % Compute the weighted betweenness centrality scores for the graph to % determine the roads most often found on the shortest path between two % nodes. Normalize the centrality scores with the factor % $\frac{(n-2)(n-1)}{2}$ so that the score represents the probability that % a traveler along a shortest path between two random nodes will travel % through a given node. The plot indicates that there are a few very % important roads leading into and out of the city. wbc = centrality(G,'betweenness','Cost',G.Edges.Weight); n = numnodes(G); p.NodeCData = 2*wbc./((n-2)*(n-1)); colormap(flip(autumn,1)); title('Betweenness Centrality Scores - Weighted')