复杂网络实验1:ER随机图(matlab)

复杂网络实验1:ER随机图(matlab)

一.思路

1.创建degree(度)一维矩阵

2.创建点位置二维矩阵

3.生成圆形的形状,把圆形分成N份,给点赋值

4.每个点之间以一定概率形成边

 

二.代码+解析

这里贴的代码后面用//注释,不能放入matlab运行

matlab注释要用%

简单自启动,不输入点数量,边随机重连P

N=100;                                      //100个点

p=0.1;                                       //边随机连接概率P=0.1

degree=zeros(N,1);               //初始化每个点的度为0,N行1列

position=zeros(N,2);                  //生成N行2列零矩阵,存放点的位置

注意1:

matlab的矩阵下标从1开始

 

for m=1:N                                      //遍历每一行(每个点),给每个点赋值X,Y

   position(m,1)=cos(m/N*2*pi)      //X是cos,在半径为1的圆上找点

   position(m,2)=sin(m/N*2*pi)      //Y是sin

end           

注意2:        

这里我们把点分布在一个圆上,通过把2π分成N份的思路

半径为1,所以X直接取cos,Y直接取sin

 

figure;                                         //单纯显示一个窗口(用来显示图像)

hold on;                                     //把这个窗口保持住

plot(position(:,1),position(:,2),'o');  //画出这个圆上所有点,以空心圆的形式

注意3:

这里把这个窗口保持住的原因是,matlab每次使用plot都会默认打开一个窗口

这个默认窗口只有一个,也就是你两次调用plot命令,上一个默认图形窗口会被这次关掉

我们希望把画的东西画在一个图里,所以会使用hold on

我们先把点在图上画出来,下面要在点之间连线,所以这里要保持住

 

for m=1:N        

    for n=m+1:N                                                     //遍历每一个点,继而遍历这个点之后的点

        if(rand(1,1)<p)                                             //生成一个随机数(一行一列),如果小于P(这里设置成0.1)

            degree(m,1)=degree(m,1)+1;   

            degree(n,1)=degree(n,1)+1;                   //这两个点的度分别加1

            plot(position([m,n],1),position([m,n],2));   //在第m个点和第n个点之间画一条线

        end

    end

end

hold off;

 

注意4:

这里hold off的意思就是停止保持窗口,下面我们需要展示度的窗口,这个窗口的图已经画完了

figure;                           //打开一个新窗口,不和上一个窗口冲突

hist(degree);                 //hist()是直方图的命令,默认10个值的分布,给出度分布的直方图

 

三.小结

在100个点,随机连边概率0.1的情况下的ER随机图与度分布直方图 

复杂网络实验1:ER随机图(matlab)

复杂网络实验1:ER随机图(matlab)

上一篇:CF 976F 递增容量最大流


下一篇:C# GDAL基础使用之矢量处理4 信息输出打印(GetCRSInfo)