复杂网络实验2:WS小世界模型(matlab)

一.思路

1.小世界模型3个参数,N为点的数目,K表示每个点左边K/2个邻居,右边K/2个邻居,一共K个邻居,P代表每条边以多少概率重连

2.首先给定这三个参数(源码是人工输入,解析代码是我在代码中直接给出,通过修改代码中3个参数实现模型的变化)

3.画出以圆为轮廓的N个点

4.给出邻接矩阵A,将初始图像(每个点和邻居有边)的边存放在这里(先不画出来,就存在矩阵里,到时候边改过后再画)

5.修改边(其实是修改邻接矩阵)

6.按照邻接矩阵画出最后的图像

二.代码+解析

N=100       //给定100个点

K=4         //左右各两个邻居,一共4个邻居

p=0.1       //每条边以0.1的概率重连

这一块给定了模型的初始的3参数

angle=0:2*pi/N:2*pi-2*pi/N;   //1:狗:2的意思是,以狗为间隔,返回1和2之间的数组成的数组

//这里右边一部分不能取2*pi,不然就取了N+1个数,因为区间两边都算在内

//如果你右边取2*pi,我们是围成一个圆,这个2*pi的点其实就是0这个点

//这里只是取了100个角度,分摊2*pi这个圆

x=100*cos(angle);            //X取半径为100,角度为angle的圆上点的横坐标,注意这是个数组

y=100*sin(angle);

plot(x,y,'ro','MarkerEdgeColor','g','MarkerFaceColor','r','MarkerSize',8)  //画出这100个点

//‘ro’在绘图时,只画红色的圈,xi和yi的交点

//‘g’点的边缘取绿色

//‘r’点的内部取红色

//‘8’标记大小为8

hold on;      //图像保持住,画出点,等等还要画线

到这里把点画好了

A=zeros(N);            //生成一个N行N列的0矩阵赋值给A,当做初始化的邻接矩阵

for i=1:N

for j=i+1:i+k/2     //每次取当前点,并且问候右边两个邻居,给他们握手(互相加1)

jj=j;               //j赋值给jj

if j>N

jj=mod(j,N);   //如果j的右边邻居超过N,要从0开始找他的邻居

end

A(i,jj)=1;

A(jj,i)=1;            //邻接矩阵表现成我和这个邻居各加1,其实是个对称矩阵,在操作右上角的时候顺带操作左下角

end

end

//为什么要把j给jj? jj是处理过的j,因为j有时候会超过N,要转一圈

//这个时候我们的基础图完成了,接下来开始随机重连

//把图存放在邻接矩阵A中

for i=1:N

for j=i+1:i+k/2         //还是和上面一样我每次找到右边的邻居

jj=j;

if j>N

jj=mod(j,N);        //如果j可能是假邻居的话,那么jj必定是真的邻居

end

p1=rand(1,1);          //生成一个1行1列的数赋值给p1

if p1<p                 //p1小于之前设定的p,说明以0.1的概率,需要修改边

A(i,jj)=0;

A(jj,i)=0;

A(i,i)=inf;           //怕等等自己和自己连,取值无穷

a=find(A(i,:)==0);    //找到A中i行所有等于0的,就是没和i相连的点,a数组存放着所有和当前点没有连接的点

rand_data=randi([1,length(a)],1,1);    //1行1列,随机数,随机找一列

jjj=a(rand_data);

A(i,jjj)=1;

A(jjj,i)=1;

A(i,i)=0;   //从inf恢复

end

end

end

for i=1:N

for j=i+1:N            //遍历邻接矩阵的右上角

if A(i,j)~=0            //如果点i与点j之间有边(邻接矩阵中A(i,j)为1)

plot([x(i),x(j)],[y[i],y[j]],'linewidth',1.2);    //在(x(i),y(i)),(x(j),y(j))之前生成边,线宽1.2

hold on;

end

end

end

axis equal;             // 使横轴,纵轴相等

hold off;

三.源码

N=input('请输入最近邻耦合网络中节点的总数N:');K=input('请输入最近邻耦合网络中每个节点的邻居数K:');if K>floor(N-1)|mod(K,2)~=0;
disp('参数输入错误:K值必须是小于网络节点总数且为偶数的整数');
return ;
endangle=0:2*pi./N:2*pi-2*pi/N;
angle=0:2*pi/N:2*pi-2*pi/N;
x=100*sin(angle);
y=100*cos(angle);
plot(x,y,'ro','MarkerEdgeColor','g','MarkerFaceColor','r','MarkerSize',8);hold on;
A=zeros(N);
for i=1:N
for j=i+1:i+K/2
jj=j;
if j>N
jj=mod(j,N);
end
A(i,jj)=1;
A(jj,i)=1;
end
end%WS小世界网络的代码
p=input('请输入随机化重连的概率p:');
for i=1:Nfor j=i+1:i+K/2jj=j;if j>Njj=mod(j,N);endp1=rand(1,1);if p1<pA(i,jj)=0;A(jj,i)=0;A(i,i)=inf;a=find(A(i,:)==0);rand_data=randi([1,length(a)],1,1);jjj=a(rand_data);A(i,jjj)=1;A(jjj,i)=1;A(i,i)=0;endend
endfor i=1:N
for j=i+1:N
if A(i,j)~=0
plot([x(i),x(j)],[y(i),y(j)],'linewidth',1.2);
hold on;
end
end
end
axis equal;
hold off

四.小结

生成的小世界图像如下图所示

复杂网络实验2:WS小世界模型(matlab)相关推荐

  1. matlab ws小世界网络,【MATLAB】构建WS小世界网络

    分析: 进行复杂网络相关研究的基础,就是要构建适当的网络模型.这次选择用Matlab构建一个WS小世界网络练练手. 首先,为了方便数据处理,网络模型我们用邻接矩阵的表示,这样虽然看上去不太直观,但是对 ...

  2. Neo4j 图数据库高级应用系列 / 服务器扩展指南 APOC 8.6 - 图生成 小世界模型

    1.概述 WS小世界模型(Watts - Strogatz model)是一种随机图生成模型,其生成的图具有小世界属性,包括较短的平均节点间距离和高集聚系数.该模型由Duncan J. Watts(邓 ...

  3. 常见网络模型——ER随机图、规则图、BA、WS小世界

    ER随机图:(没有重边和自环的简单图) 定义一:具有固定边数的ER随机图 G(N,M) 构造算法: (1)初始化:给定 N 个节点和待添加的边数 M (2)随机连边: 随机选取一对没有边相连的不同节点 ...

  4. WS小世界网络构建实验(Matlab版)

    WS小世界网络构建实验(Matlab版) 一.构造原理思路 1.小世界模型3个参数,N为点的数目,K表示每个点左边K/2个邻居,右边K/2个邻居,一共K个邻居,P代表每条边以多少概率重连 2.首先给定 ...

  5. 复杂网络多局域世界模型matlab算法实现

    3.12多局域世界模型 3.12.1 多局域世界模型的构造方法 (1) 以概率p增加一个拥有m0个节点,e0条边的局域世界,代码如下: (2)选定一个已存在的局域世界,以概率q将一个新节点,以给定概率 ...

  6. 差分方程matlab实验报告,实验二微分方程与差分方程模型Matlab求解

    实验二微分方程与差分方程模型Matlab求解 实验二: 微分方程与差分方程模型Matlab求解 一.实验目的 [1] 掌握解析.数值解法,并学会用图形观察解的形态和进行解的定性分析: [2] 熟悉MA ...

  7. matlab差分方程和微分方程,实验二微分方程与差分方程模型matlab求解

    实验二微分方程与差分方程模型matlab求解 实验二: 微分方程与差分方程模型 Matlab 求解一.实验目的[1] 掌握解析.数值解法,并学会用图形观察解的形态和进行解的定性分析:[2] 熟悉 MA ...

  8. WS小世界网络的仿真实现

  9. 小世界网络matlab程序,小世界网络简介及及matlab建模.doc

    小世界网络简介及及matlab建模.doc 小世界网络MATLAB建模1简介小世界网络存在于数学.物理学和社会学中,是一种数学图的模型.在这种图中大部份的结点不与彼此邻接,但大部份结点可以通过任一其它 ...

  10. 基于小世界网络的Cov-19扩散问题可视化研究

    摘要:近年来,疾病传播问题得到了广泛的研究.一般来说,疾病的传播被认为是从一个人到另一个人的过程.目前,关于传染病在复杂网络上传播的研究很多.事实上,在现实生活中,传染病在人群网络中的传播是极其复杂的 ...

最新文章

  1. ICCV2021最佳检测之一:主动学习框架较大提升目标检测精度(附论文下载)
  2. bagging 与boosting
  3. 4.SELECT DISTINCT 语句
  4. 【深度学习】搞懂 Vision Transformer 原理和代码,看这篇技术综述就够了
  5. HNOI2018酱油记
  6. js 操作location URL对象进行操作
  7. 如何解决js引入混乱_做个笔记,图片如何实现懒加载(LazyLoad按需加载)
  8. Julia: bug? = split ,isnumber
  9. 下载我的CSDN资源
  10. ubuntu 的 kitti2bag安装与测试
  11. 如何将不清晰的扫描版pdf转为清晰的pdf或word
  12. python批量获取百度贴吧_python网络爬虫案例:批量爬取百度贴吧页面数据
  13. BIM应用落地:基于BIM的群塔作业方案优化
  14. 安全运营和应急响应详解
  15. 监控安防人员入门基础
  16. 大小写字母转换c语言用getchar,用getchar改写大小写.doc
  17. 抖音怎么宣传自己的东西?通过什么方式去宣传?
  18. 《那些年啊,那些事——一个程序员的奋斗史》——98
  19. matlab计算惯性矩,梁单元有限元计算程序(matlab)
  20. CorelDRAW版本限制使用关闭永久禁止联网登录弹窗口错误修复教程

热门文章

  1. mysql中的eeplace,mysql必知必会笔记
  2. 您的Mac已成功加入Wi-Di网络,但是无法访问互联网问题及解决方案
  3. 大数据常用web页面
  4. 经典英文linux书籍,Linux内核编程必读(英文版),丛书名: 经典原版书库
  5. 你的成就只能代表着你过去的努力程度
  6. 集合(二):Set : HashSet; LinkedHashSet; TreeSet
  7. 刽子手游戏 C语言实现
  8. 冰点还原忘记密码如何修改配置或卸载
  9. WDF 驱动程序echo安装
  10. 电脑怎么设置计算机系统,细说电脑怎么设置wifi