123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- function [CIJ] = makeevenCIJ(N,K,sz_cl)
- %MAKEEVENCIJ Synthetic modular small-world network
- %
- % CIJ = makeevenCIJ(N,K,sz_cl);
- %
- % This function generates a random, directed network with a specified
- % number of fully connected modules linked together by evenly distributed
- % remaining random connections.
- %
- % Inputs: N, number of vertices (must be power of 2)
- % K, number of edges
- % sz_cl, size of clusters (power of 2)
- %
- % Outputs: CIJ, connection matrix
- %
- % Notes: N must be a power of 2.
- % A warning is generated if all modules contain more edges than K.
- % Cluster size is 2^sz_cl;
- %
- %
- % Olaf Sporns, Indiana University, 2005/2007
- % compute number of hierarchical levels and adjust cluster size
- mx_lvl = floor(log2(N));
- sz_cl = sz_cl-1;
- % make a stupid little template
- t = ones(2).*2;
- % check N against number of levels
- Nlvl = 2^mx_lvl;
- if (Nlvl~=N)
- disp('Warning: N must be a power of 2');
- end;
- N = Nlvl;
- % create hierarchical template
- for lvl=1:mx_lvl-1
- CIJ = ones(2^(lvl+1),2^(lvl+1));
- group1 = 1:size(CIJ,1)/2;
- group2 = size(CIJ,1)/2+1:size(CIJ,1);
- CIJ(group1,group1) = t;
- CIJ(group2,group2) = t;
- CIJ = CIJ+ones(size(CIJ,1),size(CIJ,1));
- t = CIJ;
- end;
- s = size(CIJ,1);
- CIJ = CIJ-ones(s,s)-mx_lvl.*eye(s);
- % assign connection probabilities
- %CIJp = mx_lvl-CIJ-sz_cl;
- %CIJp = (CIJp>0).*CIJp;
- CIJp = (CIJ>=(mx_lvl-sz_cl));
- % determine number of remaining (non-cluster) connections and their
- % possible positions
- %CIJc = (CIJp==0);
- CIJc = (CIJp==1);
- remK = K-nnz(CIJc);
- if (remK<0)
- disp('Warning: K is too small, output matrix contains clusters only');
- end;
- [a,b] = find(~(CIJc+eye(N)));
- % assign 'remK' randomly distributed connections
- rp = randperm(length(a));
- a = a(rp(1:remK));
- b = b(rp(1:remK));
- for i=1:remK
- CIJc(a(i),b(i)) = 1;
- end;
- % prepare for output
- CIJ = CIJc;
|