ba网络c语言编程,如何用C语言程序构造随机网络和BA无尺度网络

ffd6ac8b64ae3ad2c6d02f2b36d5143f.png

anhuati

答疑小能手

12-10

TA获得超过2123个赞

tic;

%%%%%% 四个输入变量

I=10; %% 表示现实的次数,I要大于或者等于3,才能对节点的度数用邻接矩阵进行统计

N=1000; %% 表示网络的节点的个数

m0=3; %% 表示网络的初始节点个数

m=1; %% 表示新点与旧网络连边的数目

realization_of_distribution=sparse(I,N);

for J=1:I % 对I次现实做平均,然后用这个平均值近似网络的度分布

format long;

adjacent_matrix=sparse(m0,m0);

for i=1:m0

for j=1:3

if j~=i

adjacent_matrix(i,j)=1;

end

end

end

adjacent_matrix=sparse(adjacent_matrix);

node_degree=sparse(1,m0); % node_degree表示各个节点的度数

for p=1:m0

%last_element=sparse(m0,1);

%last_element=cumsum(adjacent_matrix(1:m0,p));

%node_degree(p)=last_element(m0);

node_degree(p)=sum(adjacent_matrix(1:m0,p));

end

%%%%%%%%%%%%%%%%%%%%%%%%%

% 每次加入一个新点,新点和老点之间按照择优概率进行连接,

% 值得注意的是,每次新点加入之后,网络的择优概率都发生变化,

% 每一次循环都是一个相对独立的整体,要把流程进行分割处理

for iteration=4:N

[J,iteration]; % 控制现实和迭代的次数

total_degree=2*m*(iteration-4)+6; %%% 迭代之前的网络各个节点的度数之和

degree_frequency=node_degree/total_degree; %%% 每个节点的度数的频数,这是新点连边的择优概率

cum_distribution=cumsum(degree_frequency); %%% cum_distribution把区间 [0,1] 分成若干个小区间,从而对这些个小区间进行投点实验

interval=cum_distribution(1:(iteration-1)); %%% 这是小区间的端点,是cum_distribution的前 iteration-1 个元素

%**************************************************************************

%%% 下面把 r1 和 [0,1] 内的各个小区间的端点进行比较,落在第 i 小区间,就意味着和第 i 个节点相连边 %%%

choose=zeros(1,m); %%% choose存放的是和新点相连接的一个老点

%%% 选出第一个和新点相连接的顶点

r1=rand(1);

if r1

choose(1)=1;

elseif r1>=interval(iteration-2)

choose(1)=iteration-1;

elseif (r1>=interval(1))&r1

for j=2:iteration-2

if (r1>=interval(j-1))&r1

choose(1)=j;

break;

end

end

end

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值