File Exchange

image thumbnail

B-A Scale-Free Network Generation and Visualization

version (60.7 KB) by Mathew George
A set of functions designed to create and visualize scale-free networks.


Updated 27 Apr 2007

No License

*Description and Cautions

-The SFNG m-file is used to simulate the B-A algorithm and returns scale-free networks of given node sizes. Understanding the B-A algorithm is key to using this code to its fullest. Due to Matlab resource limitations, it may not be possible to generate networks much larger than 15000 nodes, and increasing the mlinks variable increases processing time severely. This code was developed so that one could generate a network of small size, and then use that network as a seed to build a greater sized network, continuing this process until the actual desired network size is reached. This is for processor and time management purposes. However, realize that the initial seed does not have to have scale-free properties, while the later seeds may happen to have these properties. Therefore, it is prudent not to make the initial seed size much larger than a few nodes (most commonly 5 interconnected nodes). In addition, the mlinks should be kept constant throughout the creation of the scale-free network.

-The PLplot m-file takes a scale-free network in adjacency matrix format and draws a best fit line to the frequency of degrees distribution of the nodes. Degree is the number of links that connect to and from a single node For scale-free networks, the frequency of degrees distribution forms a power-law curve, with an exponent usually between -2 and -3. This code is designed to allow only non-zero frequencies to be graphed in log-log format. The function returns the equation of the power-law fit in a cfit variable.

-The CNet m-file function creates a network graph using the gplot function with circular coordinates. It allows for a simple, yet intuitive, visualization of a given network.



-Nodes is the desired network size, including the seed network size (i.e. Nodes minus seed network size equals the number of nodes to be added).

-mlinks controls the number of links a new node can make to the existing network nodes.

-seed is the original network to which the B-A algorithm links additional nodes with a specific preferential attachment procedure. This undirected adjacency matrix can be created manually, or one could use the Adjacency Matrix GUI. Each node must have at least one link. The seed variable can be replaced with a developed scale-free network to generate a larger one. Make sure the new Nodes variable is greater than the size of the seed network.

-Net is the input network which is to be graphed.

-Net is the input network which is to be graphed.

Note that variables Nodes, mlinks, and size must be whole numbers and variables seed and Net must be undirected adjacency matrices. The diagonal elements of any adjacency matrix used with these functions must all be zero.

*Sample Output

Here is a small example to demonstrate how to use the code. This code creates a seed network of 5 nodes, generates a scale-free network of 300 nodes from the seed network, and then performs the two graphing procedures.

seed =[0 1 0 0 1;1 0 0 1 0;0 0 0 1 0;0 1 1 0 0;1 0 0 0 0]
Net = SFNG(300, 1, seed);
PL_Equation = PLplot(Net)


One explanation of the B-A Algorithm can be found on this PDF website

Undirected Adjecency Matrices are defined on

The Adjacency Matrix GUI file by Steve Chuang can be found on the Matlab File Exchange


Special thanks to Mark Ballerini with the Massapequa High School Science Research Program and Zoltan Dezso at the University of Notre Dame for their invaluable help in researching network theory as well as to my family for providing motivation and encouragement in pursuing science.

Cite As

Mathew George (2020). B-A Scale-Free Network Generation and Visualization (, MATLAB Central File Exchange. Retrieved .

Comments and Ratings (24)


Thank you a lot.I have one question:how can we know the power law of this network.And can we generate scale- free network with a prescribed power law?

Thanks a lot for the excellent work!!

a b

thank you. it was great and useful.

It generates loops.


"seed is the original network to which the B-A algorithm links additional nodes with a specific preferential attachment procedure"

If we want to put specific preferential value, do we need to change the random part which is being passed while creating additional nodes?


Thank you so much, It's very useful for my work :-)


Thank you!
While sometimes node will connect to itself. I modified the SFNG file with "rnode = ceil(rand * (pos-1));" to correct it. I hope it is right.



Very Useful


Hi, nice work! I only have a question. This function generates a scale-free network. By inspecting the adjacency matrix I can see that it's a directed graph. My question is: where is the power-law observed: indegree or outdegree distribution? The exponent that is computed through the PLplot function refers to indegree or outdegree? Thanks.


With response to Nizar: This does incorporate preferential attachment using the Barabasi-Albert ( algorithm. However, this implementation is not optimized. It is easy enough to reimplement from the wikipedia algorithm description ~10-20x faster.

Nizar Dahir

Very nice work thank you,
I just wanted to remark that this model of complex networks does not incorporates the "rich get richer property".

when attaching nodes to the networks the propability of node attachmnet should be proportional to the exsiting node degrees.

Thi Ha Kyaw

Thank you very much, Mathew George. With your codes and a little bit of my modification, I have managed to produce a new type of complex network model. It saves my time a lot. Thanks for the posting.


Thank you!

The code is elegant. Congrats for the good work. My problem is I am interested in generating large SF Network of the size 50000 X 50000. I tried out different iterations, it seems in matlab, the in-built command zeros can't take size more than 17000 X 17000. Above this, it shows out of memory. Could you suggest how to solve this.

Tingting Zhou

It is good. Unfortunately my case is to generate the directed network and the mlinks would be more than 5. I'd like to get your opinion on how to modify the code in this case. Many thanks.

mark kazmierski

I use Matlab2007b and while executing an example I get an error: Undefined function or method 'fit' for input arguments of type 'double'.

Any idea where I can find fit function?

Mathew George

For those keeping up, this file has been fixed and can now be downloaded and the Published m-file can be viewed now.

Thanks for your interest!

tian wei

It's a good code for the network analysis!Thanks for you hard work!

yu xue

Ok! Thank you

marcel blattner

Would be nice if one could download the file !!!!!!!!


Link to zip file is deal

Deng Mingsen

It could not download now


Broken Link when first submitted. Resubmitting upon community request.

MATLAB Release Compatibility
Created with R14SP3
Compatible with any release
Platform Compatibility
Windows macOS Linux