MATLAB實例:構造網絡連接圖(Network Connection)及計算圖的代數連通度(Algebraic Connectivity)


MATLAB實例:構造網絡連接圖(Network Connection)及計算圖的代數連通度(Algebraic Connectivity)

作者:凱魯嘎吉 - 博客園 http://www.cnblogs.com/kailugaji/

1. 圖的代數連通度(Algebraic Connectivity)

圖的代數連通度:Laplace圖譜的次小特征值。

2. 網絡連接圖(Network Connection)的構造

        隨機生成一個具有50個節點的傳感器網絡。節點隨機放置在3.5 x 3.5方形區域內,通信距離為0.8。如下圖所示,共有159條邊,其代數連通度為:0.3007。

3. MATLAB程序

demo_Create_Network_Connection.m

%創建無向圖 網絡連接圖 Network Connection.
clc;
close all;
clear;

Conf.Square = 3.5;  %方形區域的邊長
Conf.NodeNumber = 50;  %節點個數
Conf.CommDist = 0.8;  %最大通信距離

is_create_network = 1;
if is_create_network == 1
    [ Network, Dists ] = CreateNetworksFunc(Conf);
    save Network_1.mat Network
else
    load Network_1.mat
end

nodenum = size(Network.Nodes.loc,1);  %節點個數
lap_matrix = zeros(nodenum);  %節點數*節點數 圖的Laplace矩陣:diag(d1,d2,...dn)-鄰接矩陣,di為節點i的度
for i=1:nodenum
    idx = Network.Nodes.neighbors{i};  %鄰接節點的id
    lap_matrix(i,idx) = -1;   %負的鄰接矩陣
    lap_matrix(i,i) = length(idx);  %對角線元素為節點的度
end
eig_val = eig(lap_matrix);  %lap_matrix的特征值
eig_val = sort(eig_val,'ascend');  %從小到大排序,最小特征值為0
algeb_conn = eig_val(2) % algebraic connectivity 代數連通度:lap_matrix的第二小特征值>0,連通圖
avg_deg = sum(diag(lap_matrix))/nodenum   % average values 節點度的均值

DrawNetworks(Network);
% DrawNetworks(Network, Dists); %把所有的邊的長度(通信距離)都標出來了
print(gcf,'-dpng','Network_1.png');  %保存圖片

CreateNetworksFunc.m

function [ Network, Dists ] = CreateNetworksFunc(Conf)
%  創建無向圖 網絡連接圖 Network Connection.
    num = Conf.NodeNumber;  %節點個數
    square = Conf.Square;  %方形區域的邊長
    maxDist = Conf.CommDist;  %最大通信距離
   
    loc = square*rand(num,2) - square/2;  %num*2的隨機數 節點坐標     
    Dists = Euclid_Dist(loc(:,1),loc(:,2));  %節點數*節點數,對角線元素為0
    
    % without self-loop 不存在節點自己到自己的路徑,對角線上的元素為無窮大
    Dists = Dists + 10*maxDist*eye(num);
    
    Neighbors = cell(num,1);
    maxDegree = 0; %節點的最大度,與節點相鄰的最大邊數
    edges = 0;  %圖的總邊的個數,無向圖的度/2
    for i=1:num
        Neighbors{i} = find(Dists(i,:)<=maxDist);  %找鄰接節點的id
        if length(Neighbors{i}) > maxDegree
            maxDegree = length(Neighbors{i});  %節點的最大度
        end
        edges = edges + length(Neighbors{i});
    end
   
    Nodes.loc = loc;
    Nodes.neighbors = Neighbors;
    
    Network.maxDegree = maxDegree;
    Network.edges = edges/2; %% undirected graph
    Network.Conf = Conf;
    Network.Nodes = Nodes;
end

function dist = Euclid_Dist(X,Y)
% 求兩兩節點之間的距離,輸出[節點*節點]的矩陣,距離矩陣
    len = length(X);
    xx = repmat(X,1,len); %節點數*節點數
    yy = repmat(Y,1,len);    
    dist = sqrt((xx-xx').^2+(yy-yy').^2);  %節點數*節點數
end

DrawNetworks.m

function fig = DrawNetworks( Network )
%畫無向圖 網絡連接圖 Network Connection.
% function fig = DrawNetworks( Network, Dists )  %把所有的邊的長度(通信距離)都標出來了

num = Network.Conf.NodeNumber;  %節點個數
loc = Network.Nodes.loc;  %節點坐標
square = Network.Conf.Square;  %方形區域的邊長
Neighbors = Network.Nodes.neighbors;  %鄰接節點的id

fig = figure;
plot(loc(:,1),loc(:,2),'ro','MarkerSize',8,'LineWidth',2);  %節點是紅色圓圈
side=ceil(square/2);
axis([-side,side,-side,side]);   
for i=1:num
    for k = 1:length(Neighbors{i})
        j = Neighbors{i}(k);
%             c = num2str(Dists(i,j),'%.2f');
%             text((loc(i,1) + loc(j,1))/2,(loc(i,2) + loc(j,2))/2,c,'Fontsize',10);  %把所有的邊的長度(通信距離)都標出來了
%             hold on;
        line([loc(i,1),loc(j,1)],[loc(i,2),loc(j,2)],'LineWidth',0.8,'Color','b'); %線是藍色
    end
end
set(gcf, 'Color', 'w'); %白色
end

4. 參考文獻

[1] Hua J, Li C. Distributed variational Bayesian algorithms over sensor networks[J]. IEEE Transactions on Signal Processing, 2015, 64(3): 783-798.

[2] 肖恩利, 束金龍, 聞人凱. 圖的代數連通度及其點連通度[J]. 華東師范大學學報(自然科學版), 2003, 2003(4):1-4.

[3] Junhao Hua. Distributed Variational Bayesian Algorithms. Github, 2017.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM