clear;
clc; %程序运行内存清零
% init data matrix .
A=[0,1,1,1;1,0,1,1;1,1,0,1;1,1,1,0]; %起始网络4*4
for u=1:2 %做2次循环以便求出图形的较为光滑
KK(1,199)=0;
for L=1:500 % 产生1004*1004矩阵
C=sum(A); %所有节点的度
D=C/sum(C); %所有节点度的概率
E=cumsum(D); %右区间
%C,D,E的长度是相同的,用L表示
L=length(C); %随机选择原始网络里的一个结点
K1=rand;
for n=1:L
if(K1<E(n))
i=n;
break;
end
end
m=1;
E1= cumsum (D); %右区间一维矩阵
E1(i)=0; %随机选中根接点M的度的概率置0 随机选择M的邻接点H1
K2=rand;
q=0;
for a=1:2 %判断如果选中一维矩阵的最后一个的处理方式
for n=1:L
if(K2<E1(n))
i1=n;
q=1;
break;
end
end
if (q==0)
i1=n-1;
end
a=a+1;
end
m=2;
E2=cumsum(D); %右区间一维矩阵
E2(i)=0; %被选中的邻接点H1的度的概率置0 随机选择H1的邻接点H2
E2(i1)=0;
K3=rand;
q=0;
for a=1:2;
for n=1:L
if(K3<E2(n))
i2=n;
q=1;
break;
end
end
if (q==0)
i2=n-1;
end
a=a+1;
end
L=L+1;
A(L,L)=0; %新增节点扩展矩阵
A(i1,L)=1;
A(L,i1)=1;
A(i2,L)=1;
A(L,i2)=1;
H1=sum(A);
end
H1;
i=0; %以下是求49个节点度的平均选择的概率KK
for k=2:200
M=0;
for q=1:504
if(k==H1(q))
M=M+1;
end
end
i=i+1;
K(i) =M/504;
end
KK=K+KK;
end
KK=KK/2;
K;
for k=2:500 %理论值
KKP1(k)=2*2*(2+1)/(k*(k+1)*(k+2));
KKP2(k)=2*2*2*(2+1)/(k*k*(k+1)*(k+2));
end %-------------------------------------------
S=sum(K); %扩展值
KKP1(2)=KK(1);
KKP2(2:1:500);
subplot(2,2,1), plot(KK,'b-'),title('图1(m=2 扩展值:随机选择节点的度的概率随节点的度的变化曲线)');
Xlabel(' X(节点的度)') ;
Ylabel('Y(节点度的概率)') ;
grid on;
subplot(2,2,2), plot(KKP1,'r-'),axis ([0,500,0,0.4]);title(' 图2( m=2 理论值:随机选择节点的度的概率随节点的度的变化曲线)')
Xlabel('X(节点的度)') ;
Ylabel('Y(节点度的概率)') ;
grid on ;
subplot(2,2,4), plot(KKP2,'r-'),title('图3( m=2 理论模型聚集系数变化曲线');%------理论模型聚集系数变化曲线
Xlabel(' X(节点的度)') ;
Ylabel('Y(节点度的概率)') ;
grid on;
K;
W=1;
for k=2:500
CC(k)=2*2*2*(2+1)/(k*k*(k+1)*(k+2)); % ------------聚集系数理论值计算
CCC(k)=2*(k-1)/k; % ------------------------------------聚集系数扩展值计算
W=W+1;
end
CC=sum(CC); %-----------------------------------------聚集系数理论值
CCC1=sum(CCC); % ------------------------------------聚集系数扩展值
subplot(2,2,3), plot(CCC,'b-'),title('图3( m=2 扩展模型聚集系数变化曲线)');
Xlabel(' X(节点的度) ') ;
Ylabel('Y(聚集系数)');
grid on;