前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Watts-Strogatz模型作为小世界网络生成器。

Watts-Strogatz模型作为小世界网络生成器。

作者头像
裴来凡
发布2022-05-28 15:20:01
4340
发布2022-05-28 15:20:01
举报
文章被收录于专栏:图像处理与模式识别研究所

GIStest.m

代码语言:javascript
复制
clear;
n=400;  % liczba wierzcholkow
d=40;   % stopien wierzcholkow (poczatkowy)
p=0;  %prawdopodobienstwo przelaczenia

test=0;
test_wspgr=zeros(2,21);
wsprg_teor=zeros(2,21);
p=10.^(-3:0.15:0);
it=1;

while it<=length(p)
  test=test+1;
  M=diag(0);
  for u = 1:d/2   % macierz sasiedstwa
  M = M + diag(ones(n-u,1),u)+diag(ones(u,1),n-u);
  end
  M=M+M';

  for numokr=1:d/2    % numokr - numer okrazenia
  l=1; 
  tmp=numokr-1;
      for i=1:n
        ind1=0;    % indeks jedynki, ktora bedziemy poddawac analizie
        % wybor wezla do analizy
        if i==(n-tmp) % tutaj robimy tak, aby na 1-m okrazeniu scprawdzany byl pierwszy najblizszzy sasiad, na 2-m - drugi i td.
        ind1=numokr-tmp;  
        tmp=tmp-1;
        else 
          ind1=i+numokr;
        end
        
        random=rand;  % generowanie wartosci losowej
        if random<=p(it)   % jesli wartosc jest miejsza albo rowna wspolczynniku grupowania, to krawedz jest przepinana
          % tworzona tablica z indeksami wierzcholkow, do ktorych moze byc przelaczona krawedz
          ind=1;
          zer=zeros(1,n);  
          for j=1:n        
            if (i ~= j && M(i,j)==0)
              zer(ind)=zer(ind)+j; 
              ind=ind+1; 
            end 
          end
          
          % losowo wybieramy wierzcholek, do ktorej bedzie przepieta krawedz
          nul = find(zer==0);  
          ind0random = randi(length(zer)-length(nul)); 
          ind0=zer(ind0random);

          % przepinanie krawedzi
          M(i,ind0)=1;
          M(ind0,i)=1;
          M(i,ind1)=0;
          M(ind1,i)=0;
        end
      end
  end    

  % rozklad stopni wierzcholkow wynik w macierzy
  stopnie=zeros(1,n);
  for i=1:n
    stopnie(i) = length(find(M(i,:)==1));
  end

  mini=min(stopnie);  %minimalny stopien wierzcholka
  maxi=max(stopnie);  %maksymalny stopien wierzcholka

  rstopni=zeros(2,maxi);
  ilosc=0;
  for stopien=mini:maxi
    for i=1:n
      if stopnie(i)==stopien
        ilosc=ilosc+1;
      end
      rstopni(1,stopien)=stopien;
      rstopni(2,stopien)=ilosc;
    end
    ilosc=0;
  end

  % wspulczynnik grupowania
  wspgr=zeros(1,n);
  for i=1:n
    ci=0;
    e=0;
    for j=1:n
      if M(i,j)==1 
        for j1=(j+1):n
          if M(i,j1)==1 && M(j,j1)==1
            e=e+1;
          end
        end
      end
    end
    ci=(2*e)/(d*(d-1));
    wspgr(i)=ci;
  end

  ws=0;
  for i=1:n
    ws=ws+wspgr(i);
  end
  wsgrs=ws/n;    % wspolczynnik grupowania calej sieci
    test_wspgr(1,test)=p(it);
  test_wspgr(2,test)=wsgrs;
    
    % teoretyczny wspgr
    wsprgteor=((3*(d/2-1))/(2*((2*d/2)-1)))*(1-p(it))^3;
    wsprg_teor(1,test)=p(it);
    wsprg_teor(2,test)=wsprgteor;
    
    p(it)
    it=it+1;

end

    figure(test+1);
  plot(test_wspgr(1,:), test_wspgr(2,:),'bo', ...
        wsprg_teor(1,:), wsprg_teor(2,:), 'ro');
    grid on;
    title(['Rozklad wspolczynnika grupowania dla \it n= ',num2str(n), ', d= ',num2str(d)]);
    xlabel('p');
  ylabel('Wspolczynnik grupowania');
  legend('otrzymany','oczekiwany');
    figure(test+2);
    semilogx(test_wspgr(1,:), test_wspgr(2,:),'bo', ...
        wsprg_teor(1,:), wsprg_teor(2,:), 'ro');
    grid on;
    title(['Rozklad wspolczynnika grupowania dla \it n= ',num2str(n), ', d= ',num2str(d)]);
    xlabel('p');
  ylabel('Wspolczynnik grupowania');
  legend('otrzymany','oczekiwany');

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-05-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 图像处理与模式识别研究所 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档