您的位置:首页 > 理论基础 > 计算机网络

matlab在复杂网络上的应用

2017-04-22 17:39 1526 查看
仿真AB模型

function b = addedge(a,m,alpha)

b=a; n=length(a);

for i=1:m

    deg=sum(b);

    LP=(deg+alpha)/sum(deg+alpha);

    pp=cumsum(LP);

    rnum=randperm(n);

    flag=1;

    while flag<=n && deg(rnum(flag))==n-1

        flag=flag+1;

    end

    if flag==n+1,continue,end

    ind=find(pp>=rand);

    if rnum(flag)~=ind(1)&&b(ind(1))==0;

        b(rnum(flag),ind(1))=1;b(ind(1),rnum(flag))=1;

    end

end

function b=deleteadd(a,m,alpha)

b=a;n=length(a);

for i=1:m

    deg=sum(b);

    LP=(deg+alpha)/sum(deg+alpha);

    pp=cumsum(LP);

    rnum=randperm(n);

    flag=1;

    while flag<n && deg(rnum(flag))==0

        flag=flag+1;

    end

    if flag==n && deg(rnum(flag))==0

        continue

    end

    ind1=find(b(:,rnum(flag)));

    rnum2=randpem(length(ind1));

    cnode=ind1(rnum2(1));

    ind2=find(pp>=rand);

    if rnum(flag~=ind2(1))&& b(rnum(flag),ind2(1))==0

        b(rnum(flag),cnode)=0;b(cnode,rnum(flag))=0;

         b(rnum(flag),ind2(1))=1;b(ind2(1),rnum(flag))=1;

    end

end

function b=addnode(a,m,alpha)

b=a; n=length(a);

if m>n

    return

end

for i=1:m

    LP=(sum(b)+alpha)/sum(sum(b)+alpha);

    pp=cumsum(LP);

    ind=find(pp>=rand);

    b(n+1,ind(1))=1;b(ind(1),n+1)=1;
end

求网络的度

function dp=mydegree(a)

N=length(a);

deg=sum(a);

degrange=minmax(deg);

pinshu=hist(deg,(degrange(1):degrange(2)));

ind= pinshu==0;

dp=[(degrange(1):degrange(2));pinshu];

dp(:,ind)=[];

df=dp(2,:)/N;

figure,bar(dp(1,:),df,'r')

title('网络图的度分布');

xlabel('$k$','Interpreter','Latex'),ylabel('$p$','Interpreter','Latex')

参考《复杂网络算法与应用》
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  matlab 仿真程序 函数