经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » MATLAB » 查看文章
MATLAB实例:构造网络连接图(Network Connection)及计算图的代数连通度(Algebraic Connectivity)
来源:cnblogs  作者:凯鲁嘎吉  时间:2019/10/31 8:57:00  对本文有异议

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

  1. %创建无向图 网络连接图 Network Connection.
  2. clc;
  3. close all;
  4. clear;
  5.  
  6. Conf.Square = 3.5; %方形区域的边长
  7. Conf.NodeNumber = 50; %节点个数
  8. Conf.CommDist = 0.8; %最大通信距离
  9.  
  10. is_create_network = 1;
  11. if is_create_network == 1
  12. [ Network, Dists ] = CreateNetworksFunc(Conf);
  13. save Network_1.mat Network
  14. else
  15. load Network_1.mat
  16. end
  17.  
  18. nodenum = size(Network.Nodes.loc,1); %节点个数
  19. lap_matrix = zeros(nodenum); %节点数*节点数 图的Laplace矩阵:diag(d1,d2,...dn)-邻接矩阵,di为节点i的度
  20. for i=1:nodenum
  21. idx = Network.Nodes.neighbors{i}; %邻接节点的id
  22. lap_matrix(i,idx) = -1; %负的邻接矩阵
  23. lap_matrix(i,i) = length(idx); %对角线元素为节点的度
  24. end
  25. eig_val = eig(lap_matrix); %lap_matrix的特征值
  26. eig_val = sort(eig_val,'ascend'); %从小到大排序,最小特征值为0
  27. algeb_conn = eig_val(2) % algebraic connectivity 代数连通度:lap_matrix的第二小特征值>0,连通图
  28. avg_deg = sum(diag(lap_matrix))/nodenum % average values 节点度的均值
  29.  
  30. DrawNetworks(Network);
  31. % DrawNetworks(Network, Dists); %把所有的边的长度(通信距离)都标出来了
  32. print(gcf,'-dpng','Network_1.png'); %保存图片

CreateNetworksFunc.m

  1. function [ Network, Dists ] = CreateNetworksFunc(Conf)
  2. % 创建无向图 网络连接图 Network Connection.
  3. num = Conf.NodeNumber; %节点个数
  4. square = Conf.Square; %方形区域的边长
  5. maxDist = Conf.CommDist; %最大通信距离
  6. loc = square*rand(num,2) - square/2; %num*2的随机数 节点坐标
  7. Dists = Euclid_Dist(loc(:,1),loc(:,2)); %节点数*节点数,对角线元素为0
  8. % without self-loop 不存在节点自己到自己的路径,对角线上的元素为无穷大
  9. Dists = Dists + 10*maxDist*eye(num);
  10. Neighbors = cell(num,1);
  11. maxDegree = 0; %节点的最大度,与节点相邻的最大边数
  12. edges = 0; %图的总边的个数,无向图的度/2
  13. for i=1:num
  14. Neighbors{i} = find(Dists(i,:)<=maxDist); %找邻接节点的id
  15. if length(Neighbors{i}) > maxDegree
  16. maxDegree = length(Neighbors{i}); %节点的最大度
  17. end
  18. edges = edges + length(Neighbors{i});
  19. end
  20. Nodes.loc = loc;
  21. Nodes.neighbors = Neighbors;
  22. Network.maxDegree = maxDegree;
  23. Network.edges = edges/2; %% undirected graph
  24. Network.Conf = Conf;
  25. Network.Nodes = Nodes;
  26. end
  27.  
  28. function dist = Euclid_Dist(X,Y)
  29. % 求两两节点之间的距离,输出[节点*节点]的矩阵,距离矩阵
  30. len = length(X);
  31. xx = repmat(X,1,len); %节点数*节点数
  32. yy = repmat(Y,1,len);
  33. dist = sqrt((xx-xx').^2+(yy-yy').^2); %节点数*节点数
  34. end

DrawNetworks.m

  1. function fig = DrawNetworks( Network )
  2. %画无向图 网络连接图 Network Connection.
  3. % function fig = DrawNetworks( Network, Dists ) %把所有的边的长度(通信距离)都标出来了
  4.  
  5. num = Network.Conf.NodeNumber; %节点个数
  6. loc = Network.Nodes.loc; %节点坐标
  7. square = Network.Conf.Square; %方形区域的边长
  8. Neighbors = Network.Nodes.neighbors; %邻接节点的id
  9.  
  10. fig = figure;
  11. plot(loc(:,1),loc(:,2),'ro','MarkerSize',8,'LineWidth',2); %节点是红色圆圈
  12. side=ceil(square/2);
  13. axis([-side,side,-side,side]);
  14. for i=1:num
  15. for k = 1:length(Neighbors{i})
  16. j = Neighbors{i}(k);
  17. % c = num2str(Dists(i,j),'%.2f');
  18. % text((loc(i,1) + loc(j,1))/2,(loc(i,2) + loc(j,2))/2,c,'Fontsize',10); %把所有的边的长度(通信距离)都标出来了
  19. % hold on;
  20. line([loc(i,1),loc(j,1)],[loc(i,2),loc(j,2)],'LineWidth',0.8,'Color','b'); %线是蓝色
  21. end
  22. end
  23. set(gcf, 'Color', 'w'); %白色
  24. 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.

原文链接:http://www.cnblogs.com/kailugaji/p/11765103.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号