复杂网络实验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随机图与度分布直方图