WS以及NW小世界网络的生成(MATLAB)
WS小世界网络生成算法,一般小世界网络生成算法速度慢,节点度分布与数学推导不符,在网络仿真中造成不便,这里针对实际网络动力学仿真过程撰写了WS小世界网络的MATLAB生成算法,并考虑了矩阵化,具有较高的速度。
以下是対应的代码:
% The simulation of WS-smallworld network
% the algorithm of WS-smallworld's generation has been improved in speed,
% and tend to be easily understood
% writen by winter-my-dream@hotmail.com
% Example:
% N = 100; %network size (number of nodes)
% m = 6; %2*m is the average edges of each nodes
% p = 0.1; %rewiring probability
% matrix = small_world_WS_new(N,m,p);
function matrix = small_world_WS_new(N,m,p)
rng('default')
rng('shuffle')
matrix=zeros(N,N);
% generate regular network
for i=m+1:N-m
matrix(i,i-m:i+m)=1;
end
for i=1:m
matrix(i,1:i+m)=1;
end
for i=N-m+1:N
matrix(i,i-m:N)=1;
end
for i=1:m
matrix(i,N-m+i:N)=1;
matrix(N-m+i:N,i)=1;
end
% rewiring the network
for i = 1:N
% then rewiring the edges with the probability of p
[series1,series2] = range_sort(N,m,i);
index0 = series1(rand(2*m,1)>1-p);
if(~isempty(index0))
matrix(i,index0) = 0;
matrix(i,series2(randperm(length(series2),length(index0))))=1;
end
end
matrix = matrix -diag(diag(matrix));
end function [series1,series2] = range_sort(N,m,i)
% select the index of nodes in row i for rewiring
if(i-m>0 && i+m<=N)
series1 = i-m:i+m;
series2 = setdiff(1:N,series1);
elseif(i-m<=0)
series1 = [1:i+m,N-m+i:N];
series2 = setdiff(1:N,series1);
else
series1 = [1:m-N+i,i-m:N];
series2 = setdiff(1:N,series1);
end
% Without considering the connection of diagonal elements
series1(series1==i) = [];
end
参考文献:
Watts D J, Strogatz S H. Collective dynamics of ‘small-world’networks[J]. nature, 1998, 393(6684): 440-442.
NW小世界网络的生成方法相对简单,我这里附加对应代码:
% 基于Matlab 的小世界网络仿真
% 经过矩阵化修改后,生成速度已经大大加快
function matrix = small_world_NW(N,m,p)
% N=50;m=3;p=0.1;
% matrix=sparse([]);
matrix = zeros(N,N);
for i=m+1:N- m
matrix(i,i- m:i+m)=1;
end
for i=1:m
matrix(i,1:i+m)=1;
end
for i=N- m+1:N
matrix(i,i- m:N)=1;
end
for i=1:m
matrix(i,N- m+i:N)=1;
matrix(N- m+i:N,i)=1;
end
% Random add edge
kk=(rand(N,N)<p);
matrix = logical(matrix + kk);
matrix = matrix -diag(diag(matrix));
对应生成网络的测试图的代码:
clear,clc,close all
% load A.txt
N=10;
m=2;
p=0.1;
% A= small_world_WS_new(N,m,p);
A = small_world_NW(N, m, p);
t=linspace(0,2*pi,N+1);
x=sin(t);
y=cos(t);
figure
set(gcf,'color','w')
plot(x,y,'o','markerfacecolor','k'),hold on
for i=1:N
for j=1:N
if (A(i,j)==1)
fp1=plot([x(i),x(j)],[y(i),y(j)],'r-'); hold on
set(fp1,'linesmoothing','on')
end
end
end
axis([-1.05,1.05,-1.05,1.05])
axis square
axis off
sum(sum(A))
WS以及NW小世界网络的生成(MATLAB)的更多相关文章
- 教你用webgl快速创建一个小世界
收录待用,修改转载已取得腾讯云授权 作者:TAT.vorshen Webgl的魅力在于可以创造一个自己的3D世界,但相比较canvas2D来说,除了物体的移动旋转变换完全依赖矩阵增加了复杂度,就连生成 ...
- 微信小程序 网络请求之re.request 和那些坑
微信小程序有四种网络请求类型,下面只详细介绍普通HTTPS请求(wx.request) 普通HTTPS请求(wx.request) 上传文件(wx.uploadFile) 下载文件(wx.downlo ...
- 懒人小工具:T4生成实体类Model,Insert,Select,Delete以及导出Excel的方法
由于最近公司在用webform开发ERP,用到大量重复机械的代码,之前写了篇文章,懒人小工具:自动生成Model,Insert,Select,Delete以及导出Excel的方法,但是有人觉得这种方法 ...
- 从网络服务生成Apex类
使用WSDL2Apex从网络服务生成Apex类 如果某个网络服务被定义在WSDL文件中,而Salesforce必须使用SOAP和网络服务进行通信,则这种情况在某些时候会为开发者带来很多麻烦.为了简化S ...
- Volley,小并发网络请求的好帮手
不得不说,当不了解一件事情的时候,就会像当然的认为,其很神秘.但是当真正的接触到了这些神秘的item,就不会有这种感觉了.作为一个android开发新手的我,刚接触到了Volley这个开源的网络请求框 ...
- 微信小程序利用canvas生成海报分享图片
一 . 效果 这是借用女神照生成的分享的海报,图片来自网络. 新增了poster组件和更新图片自适应 二 . 准备 准备两张图片连接,最好是自己开发账号验证的https图片链接. 三 . 实现思路 其 ...
- Postman使用小技巧 - 用Postman生成Request代码
Postman这款工具可以让你很方便的测试你的Web API,那如果你实在是没办法用Postman,必须手写代码,又或者你有别的需求是Postman没法实现的,你必须写一个特殊的script或App来 ...
- 第三篇、微信小程序-网络请求API
wx.request(OBJECT)发起的是https请求.一个微信小程序,同时只能有5个网络请求连接. OBJECT参数说明: 效果图: net.js Page({ data:{ result:{} ...
- 小程序原理,生成SQL SERVER 2008 数据库所有表的结构文档
作者:wide288 , 日期:2013-7-31 以前开发中,用 MYSQL 数据库,有个小程序 生成数据库结构文档.很方便,做为开发组的文档很有用. 现在开发中用到了 SQL SERVER 200 ...
随机推荐
- Redis的事件机制
目录 一.Redis的运行过程 二.事件数据结构 2.1 文件事件数据结构 2.2 事件事件数据结构 3.3 事件循环 三.事件的注册过程 3.1 文件事件的注册过程 3.2 时间事件的注册过程 四. ...
- 一分钟玩转 Spring IoC!
前言 「上一篇文章」我们对 Spring 有了初步的认识,而 Spring 全家桶中几乎所有组件都是依赖于 IoC 的. 刚开始听到 IoC,会觉得特别高大上,但其实掰开了很简单. 跟着我的脚步,一文 ...
- PHP zip_entry_name() 函数
定义和用法 zip_entry_name() 函数返回 zip 档案的名称.高佣联盟 www.cgewang.com 语法 zip_entry_name(zip_entry) 参数 描述 zip_en ...
- PDOStatement::setAttribute
PDOStatement::setAttribute — 设置一个语句属性(PHP 5 >= 5.1.0, PECL pdo >= 0.2.0)高佣联盟 www.cgewang.com 说 ...
- luogu P5667 拉格朗日插值2 拉格朗日插值 多项式多点求值 NTT
LINK:P5667 拉格朗日插值2 给出了n个连续的取值的自变量的点值 求 f(m+1),f(m+2),...f(m+n). 如果我们直接把f这个函数给插值出来就变成了了多项式多点求值 这个难度好像 ...
- NOI On Line 提高组题解
(话说其实我想填的是去年CSP的坑...但是貌似有一道题我还不会写咕咕咕... 先写一下这一次的题解吧. T1:序列.题意省略. 两种操作.这种题要先分析部分分 给出了全部都是2操作的子任务. 发现A ...
- charles抓取HTTPS设置,详细踩坑版
写这篇文章的背景就是,每次我在一台新电脑上用charles抓包时,总是因为各种原因无法抓到https请求,每个百度出来的回答又不是那么详细,需要通过几篇回答才能解决过程中的各种问题,所以把自己的安装经 ...
- IDEA生成MyBatis文件
IDEA 逆向 MyBatis 工程时,不像支持 Hibernate 那样有自带插件,需要集成第三方的 MyBatis Generator. MyBatis Generator的详细介绍 http:/ ...
- 深入理解mysql-进阶知识点,启动项、系统变量、字符集介绍!
mysql数据库是当前应用最为的广泛的数据库,在实际工作中也经常接触到.真正用好mysql也不仅仅是会写sql就行,更重要的是真正理解其内部的工作原理.本文先从宏观角度介绍一些mysql相关的知识点, ...
- Docker 基础知识 - 使用 tmpfs 挂载(tmpfs mounts)管理应用程序数据
卷(volumes) 和 绑定挂载(bind mounts) 允许您在主机和容器之间共享文件,这样即使在容器停止后也可以持久存储数据. 如果在 Linux 上运行 Docker,那么还有第三种选择:t ...