zoukankan      html  css  js  c++  java
  • 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.

  • 相关阅读:
    装饰者模式
    Moon.Orm总目录,及常见问题解决方案(有问题直接在这里问,我会立即作答)
    中国IT格局分析
    细说MVC框架的几大困惑
    一天学一个模式_第一天:策略模式
    一天学一个模式_第三天:单例模式
    一天学一个模式_第二天:代理模式
    News: Microsoft Released URL Rewriter 2.0 RTW
    微软一站式示例代码库 20100125 新增代码示例简介
    微软一站式示例代码库 1月小结
  • 原文地址:https://www.cnblogs.com/kailugaji/p/11765103.html
Copyright © 2011-2022 走看看