复杂网络MATLAB工具箱

幂律分布
连续型:以f(x)表示某一数量指标的发生次数,若 f(x)=f(x)-a ,就称为幂律分布。
离散型:若p(k)为离散型随机变量的概率分布,若p(k)~ck-(a+1) ,则称p(k)为幂律分布。
p(k)=c/k-a , logp(k)=logc-alogk
在双对数坐标系下,该分部呈现为一条斜率为负幂指数的直线
基本规律总结起来:只有少数节点才会被经常使用,大部分的节点很少被使用。
一个网络的度分布服从幂律分布,直观上看就是少部分节点度极大,与许多节点相连,而大部分节点度都比较小,这种网络就叫做无标度网络。

复杂网络MATLAB工具包
http://www.levmuchnik.net/常用的一些关于复杂网络的MATLAB程序。



教程1:
展示了如何生成一个随机无标度网络图,基本结构分析,包括度分布、聚类系数等。观察两种类型的攻击对网络的影响:随机攻击(所有的几点有相同的概率从网络中删除)、有目标地选择连接度最大的节点(节点度最大的节点从网络中删除)。
第二中情况下,网络几乎很快崩溃,第一种情况好一些。

教程1的相关MATLAB程序:
%% Tutorial 01
% The following scripts is a first phase of the Complex Networks Package tutorial.
% It demonstrates genration of random scale-free network and some basic analysis of it.

%%  Genrate the network:生成一个网络
NumberOfNodes = 10000; % Number of nodes节点的个数
Alpha = -2.2;   % Alpha of the scale-free graph 无标度网络的幂律指数
%define node degree distribution: 定义节点度分布
XAxis  = unique(round(logspace(0,log10(NumberOfNodes),25)));
YAxis  = unique(round(logspace(0,log10(NumberOfNodes),25))).^(Alpha+1);
% create the graph with the required node degree distribution: 根据所需节点度分布创建 图
Graph = mexGraphCreateRandomGraph(NumberOfNodes,XAxis,YAxis,1);


%%  Some basic statistics:一些基本特性

%Number of nodes in graph:图的节点的个数
disp(sprintf(‘Number of Nodes: %d’,GraphCountNumberOfNodes(Graph)));
%Number of links in graph:图的连边的个数
disp(sprintf(‘Number of Links: %d’,GraphCountNumberOfLinks(Graph)));
%Average degree:平均度
Degrees = GraphCountNodesDegree(Graph);
disp(sprintf(‘Average Node Degree: %2.2f’,mean(Degrees(:,2))));
%Find fraction of reciprocal links:找出相互连接的部分
Reciprocal = GraphCountUnderectionality(Graph);
disp(sprintf(‘Fraction of reciprocal links: %2.2f%%’,Reciprocal.DoubleConnectivityFraction*100));
% Clustering coefficient:聚类系数
CC = mexGraphClusteringCoefficient(Graph);
disp(sprintf(‘Average Clustering Coefficient: %3.3f%%’,CC.C));

%%  Node Degree Distribution:度分布(度分布是复杂网络的最重要的一个需要分析的属性)
h1 = figure;
% incoming:入度
[y x] = hist(Degrees(:,2),unique(Degrees(:,2)));
loglog(x,y/sum(y),’*r’);
hold on
% outgoing:出度
[y x] = hist(Degrees(:,3),unique(Degrees(:,3)));
loglog(x,y/sum(y),’dg’);
% expected distribution:预期的分布
loglog(XAxis,YAxis/sum(YAxis),’:b’);

xlabel(‘k,Degree’);
ylabel(‘P(k)’);
title(‘Node Degree Distribution’);
legend({‘Incoming’,’Outgoing’,’Expected’});

%%   Clustering Coefficient Distribution:聚类系数分布(高聚类特性是现实世界中无标度网络的另一个重要特性)
h2= figure;
% direct
CCin = mexGraphClusteringCoefficient(Graph,[],’direct’);
[y x] = hist(CCin.NodeClusteringCoefficient,linspace(0,1,25));
plot(x(x>0),y(x>0)/sum(y),’*r’);
hold on;
% inverse
CCout = mexGraphClusteringCoefficient(Graph,[],’inverse’);
[y x] = hist(CCout.NodeClusteringCoefficient,linspace(0,1,25));
plot(x(x>0),y(x>0)/sum(y),’dg’)
xlabel(‘CC, clustering coefficient’);
ylabel(‘P(CC)’);
title(‘Clustering coefficient distribution (CC>0)’);
legend({‘Direct’,’Inverse’});
%%   Clustering Coefficient Dependence of Degree:聚类系数与度之间的关系(一个节点的聚类系数和节点度之间有什么关系?节点的平均聚类系数与度之间的关系分析)
h3 = figure;
% direct
loglog(CCin.k,CCin.Ck,’*r’);
hold on;
% inverse
loglog(CCout.k,CCout.Ck,’dg’);

xlabel(‘k, Degree’);
ylabel(‘<CC(k)>, clustering coefficient’);
title(‘Average clustering coefficient as a function of degree’);
legend({‘Direct’,’Inverse’});

%%  Components组件(找出所有的强连接组件,)
%  remove random node untill the graph breaks apart:随机删除节点直到图分裂


%% 
TempGraph=Graph;
NodesToRemovePerStep =1;
NumbersOfNodes = [];
NumbersOfLinks = [];
NumbersOfComponents = [];
LargestClusterSizes = [];
SecondLargestClusterSizes = [];

RemainingNodes = 1:NumberOfNodes;

while ~isempty(RemainingNodes)
    NodeIndecesToRemove = unique(round(rand(NodesToRemovePerStep,1)*(numel(RemainingNodes)-1))+1);
    NodesToRemove = RemainingNodes(NodeIndecesToRemove);
    RemainingNodes = setdiff(RemainingNodes,NodesToRemove);
    TempGraph = mexGraphNodeRemove(TempGraph,NodesToRemove);
    NumbersOfNodes(end+1) = GraphCountNumberOfNodes(TempGraph);
    NumbersOfLinks(end+1) = GraphCountNumberOfLinks(TempGraph);
    if NumbersOfLinks(end)>0
        Components = mexGraphConnectedComponents(TempGraph);
        NumbersOfComponents(end+1) = numel(Components);
        ComponentsSizes = sort(cellfun(‘length’,Components),’descend’);        
        if ~isempty(ComponentsSizes)
            LargestClusterSizes(end+1) = ComponentsSizes(1);
        else
            LargestClusterSizes(end+1) = 0;
        end
        if numel(ComponentsSizes)>1
            SecondLargestClusterSizes(end+1) = ComponentsSizes(2);
        else
            SecondLargestClusterSizes(end+1) = 0;
        end
    else
        NumbersOfComponents(end+1) = 0;
        LargestClusterSizes(end+1) = 0;
        SecondLargestClusterSizes(end+1) = 0;
    end
end
h4 = figure;
plot(NumbersOfComponents,’r’);
hold on;
h5 = figure;
plot(NumbersOfNodes,’r’);
hold on;
h6 = figure;
plot(NumbersOfLinks,’r’);
hold on;
h7 = figure;
plot(SecondLargestClusterSizes,’r’);
hold on;
h8=figure;
plot(LargestClusterSizes,’r’);
hold on;

%%  remove most connected nodes (with heighest outgoing degree):删除出度最大的节点
TempGraph=Graph;
NodesToRemovePerStep =1;
NumbersOfNodes = [];
NumbersOfLinks = [];
NumbersOfComponents = [];
LargestClusterSizes = [];
SecondLargestClusterSizes = [];

RemainingNodes = 1:NumberOfNodes;

while ~isempty(TempGraph.Data)
    Degrees = GraphCountNodesDegree(TempGraph);
    [OutDegrees SortOrder]=sort( Degrees(:,3),’descend’);
    NodesToRemove = Degrees(SortOrder(1:min([numel(SortOrder) NodesToRemovePerStep])));
    TempGraph = mexGraphNodeRemove(TempGraph,NodesToRemove);
    NumbersOfNodes(end+1) = GraphCountNumberOfNodes(TempGraph);
    NumbersOfLinks(end+1) = GraphCountNumberOfLinks(TempGraph);
    if NumbersOfLinks(end)>0
        Components = mexGraphConnectedComponents(TempGraph);
        NumbersOfComponents(end+1) = numel(Components);
        ComponentsSizes = sort(cellfun(‘length’,Components),’descend’);
        if ~isempty(ComponentsSizes)
            LargestClusterSizes(end+1) = ComponentsSizes(1);
        else
            LargestClusterSizes(end+1) = 0;
        end
        if numel(ComponentsSizes)>1
            SecondLargestClusterSizes(end+1) = ComponentsSizes(2);
        else
            SecondLargestClusterSizes(end+1) = 0;
        end
    else
        NumbersOfComponents(end+1) = 0;
        LargestClusterSizes(end+1) = 0;
        SecondLargestClusterSizes(end+1) = 0;
    end
end
figure(h4)
plot(NumbersOfComponents,’g’);
xlabel(‘Step’);
ylabel(‘Number of components’);
legend({‘Random’,’Targeted’});
figure(h5)
plot(NumbersOfNodes,’g’);
xlabel(‘Step’);
ylabel(‘Number of Nodes’);
legend({‘Random’,’Targeted’});
figure(h6)
plot(NumbersOfLinks,’g’);
xlabel(‘Step’);
ylabel(‘Number of Links’);
legend({‘Random’,’Targeted’});
figure(h7);
plot(SecondLargestClusterSizes,’g’);
xlabel(‘Step’);
ylabel(‘Cluster Size’);
title(‘Size of SECOND largest cluster’);
legend({‘Random’,’Targeted’});
figure(h8);
plot(LargestClusterSizes,’g’);
xlabel(‘Step’);
ylabel(‘Cluster Size’);
title(‘Size of largest cluster’);
legend({‘Random’,’Targeted’});

运行教程1的MATLAB程序:
图1:Node Degree Distribution度分布

图2:聚类系数分布

图3:聚类系数的依赖度

图4:大量的集群出现相变
图5:节点的数量的变化
图6:连边的数量的变化
图7:第二大集群的峰值表明相变
图8:最大聚类的规模的变化


教程2:
Susceptible-Infected model(SI模型)



1 2/3维图像分割工具箱 2 PSORT粒子群优化工具箱 3 matlab计量工具箱Lesage 4 MatCont7p1 5 matlab模糊逻辑工具箱函数 6 医学图像处理工具箱 7 人工蜂群工具箱 8 MPT3安装包 9 drEEM toolbox 10 DOMFluor Toolbox v1.7 11 Matlab数学建模工具箱 12 马尔可夫决策过程(MDP)工具箱MDPtoolbox 13 国立SVM工具箱 14 模式识别与机器学习工具箱 15 ttsbox1.1语音合成工具箱 16 分数阶傅里叶变换的程序FRFT 17 魔方模拟器与规划求解 18 隐马尔可夫模型工具箱 HMM 19 图理论工具箱GrTheory 20 自由曲线拟合工具箱ezyfit 21 分形维数计算工具箱FracLab 2.2 22 For-Each 23 PlotPub 24 Sheffield大学最新遗传算法工具箱 25 Camera Calibration 像机标定工具箱 26 Qhull(二维三维三角分解、泰森图)凸包工具箱 2019版 27 jplv7 28 MatlabFns 29 张量工具箱Tensor Toolbox 30 海洋要素计算工具箱seawater 31 地图工具箱m_map 32 othercolor配色工具包 33 Matlab数学建模工具箱 34 元胞自动机 35 量子波函数演示工具箱 36 图像局域特征匹配工具箱 37 图像分割graphcut工具箱 38 NSGA-II工具箱 39 chinamap中国地图数据工具箱(大陆地区) 40 2D GaussFit高斯拟合工具箱 41 dijkstra最小成本路径算法 42 多维数据快速矩阵乘法 43 约束粒子群优化算法 44 脑MRI肿瘤的检测与分类 45 Matlab数值分析算法程序 46 matlab车牌识别完整程序 47 机器人工具箱robot-10.3.1 48 cvx凸优化处理工具箱 49 hctsa时间序列分析工具箱 50 神经科学工具箱Psychtoolbox-3-PTB 51 地震数据处理工具CREWES1990版 52 经济最优化工具箱CompEcon 53 基于约束的重构分析工具箱Cobratoolbox 54 Schwarz-Christoffel Toolbox 55 Gibbs-SeaWater (GSW)海洋学工具箱 56 光声仿真工具箱K-Wave-toolbox-1.2.1 57 语音处理工具箱Sap-Voicebox 58 贝叶斯网工具箱Bayes Net Toolbox(BNT) 59 计算机视觉工具箱VFfeat-0.9.21 60 全向相机校准工具箱OCamCalib_v3.0 61 心理物理学数据分析工具箱Palamedes1_10_3 62 生理学研究工具箱EEGLAB 63 磁共振成像处理工具箱CONN 18b 64 matlab 复杂网络工具箱 65 聚类分析工具箱FuzzyClusteringToolbox 66 遗传规划matlab工具箱 67 粒子群优化工具箱 68 数字图像处理工具箱DIPUM Toolbax V1.1.3 69 遗传算法工具箱 70 鱼群算法工具箱OptimizedAFSAr 71 蚁群算法工具箱 72 matlab优化工具箱 73 数据包络分析工具箱 74 图像分割质量评估工具包 75 相关向量机工具箱 76 音频处理工具箱 77 nurbs工具箱 78 Nurbs-surface工具箱 79 grabit数据提取工具箱 80 量子信息工具箱QLib 81 DYNAMO工具箱 82 NEDC循环的整车油耗量 83 PlotHub工具箱 84 MvCAT_Ver02.01 85 Regularization Tools Version 4.1 86 MatrixVB 4.5(含注册) 87 空间几何工具箱 matGeom-1.2.2 88 大数计算工具箱 VariablePrecisionIntegers 89 晶体织构分析工具包 mtex-5.7.0 90 Minimal Paths 2工具箱 91 Matlab数学建模工具箱
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值