复杂网络仿真入门到精通3: 网络可视化与指标仿真分析

本文为“复杂网络仿真入门到精通”系列的第三篇,前一篇我们学习了如何构建网络(包括随机网络、小世界网络与无标度网络),本篇将聚焦于网络的可视化与基础统计分析,并进一步探讨如何判断一个网络是否具有“小世界”或“无标度”特性。


一、引言

网络不仅仅是由节点与边组成的抽象结构,其拓扑特征往往蕴含了系统行为的重要信息。
从社交网络到神经网络,从交通系统到蛋白质相互作用网络,理解网络的统计特性是揭示系统规律的第一步。

本文将以 MATLAB 为主要工具,介绍:

  1. 网络可视化方法;
  2. 网络基本指标计算;
  3. 小世界与无标度性质的定量分析;
  4. 幂律分布拟合与验证。

github代码地址:复杂网络学习合集-step3
如访问不了可从下列地址保存:第一个文件夹 下面的 Step3
网盘地址


二、准备数据

可以使用前一篇中的随机、小世界、无标度模型,或导入真实网络。
例如,若已有边列表文件 edge_list.csv

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
if isfile('edge_list.csv')
T = readtable('edge_list.csv');
G = graph(T.source, T.target);
else
% 若无文件,则生成一个小世界网络示例
N = 100;
K = 4;
beta = 0.2;
s = repelem((1:N)', K/2);
t = mod(s + repmat(1:K/2, N, 1), N) + 1;
G = graph(s(:), t(:));
end
````

---

## 三、网络可视化

MATLAB 提供了丰富的可视化布局方式,如 `force`, `subspace`, `circle` 等,下面给出一个简单的实现例子,可以根据这个例子进行一定的后续优化。

```matlab
figure;
plot(G, 'Layout', 'force');
title('网络可视化(Force Layout)');

为了更直观地展示结构特征,可以根据节点度调整节点大小或颜色:

1
2
3
4
5
6
7
deg = degree(G);
figure;
p = plot(G, 'Layout', 'force');
p.NodeCData = deg;
p.MarkerSize = 5 + deg;
colorbar;
title('网络可视化(节点颜色代表度)');

同理 Python R语言,都可以实现类似的可视化方案


四、网络基本统计指标

1. 节点与边

1
2
3
numNodes = numnodes(G);
numEdges = numedges(G);
fprintf('节点数: %d, 边数: %d\n', numNodes, numEdges);

2. 平均度与度分布

1
2
3
4
5
6
deg = degree(G);
avgDeg = mean(deg);
figure;
histogram(deg);
xlabel('Degree'); ylabel('Frequency');
title('节点度分布');

3. 聚类系数与平均最短路径长度

1
2
3
C = mean(clusteringCoefficient(G));
L = mean(distances(G), 'all', 'omitnan');
fprintf('平均聚类系数: %.4f\n平均最短路径长度: %.4f\n', C, L);

clusteringCoefficient(G) 可用自定义函数或基于邻接矩阵计算:

1
2
3
4
5
6
7
8
9
10
11
12
function C = clusteringCoefficient(G)
A = adjacency(G);
n = size(A,1);
C = zeros(n,1);
for i=1:n
ki = sum(A(i,:));
if ki > 1
subA = A(i,:) * A * A(:,i);
C(i) = subA / (ki*(ki-1));
end
end
end

五、小世界特性分析

小世界网络一般具有:

  • 高聚类系数;
  • 短平均路径长度。

为了验证网络是否具有小世界特征,我们需要把网络与同规模、同平均度的随机网络进行对比:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
N = numnodes(G);
E = numedges(G);
G_rand = randomReference(G); % 同规模随机网络

C_rand = mean(clusteringCoefficient(G_rand));
L_rand = mean(distances(G_rand), 'all', 'omitnan');

SWI = (C / C_rand) / (L / L_rand);
fprintf('小世界指数 SWI = %.3f\n', SWI);

if SWI > 1
disp('该网络表现出小世界特性');
else
disp('该网络不具备显著小世界特性');
end

六、无标度特性与幂律度分布

无标度网络的节点度分布通常服从幂律形式:

$$P(k) \sim k^{-\gamma}$$

在对数坐标下呈线性关系。

1
2
3
4
5
6
7
8
deg = degree(G);
[counts, bins] = histcounts(deg, 'BinMethod', 'integers');
bins_center = bins(1:end-1) + diff(bins)/2;

figure;
loglog(bins_center, counts/sum(counts), 'o');
xlabel('k'); ylabel('P(k)');
title('度分布(对数坐标)');

幂律拟合与参数估计

1
2
3
4
5
6
7
8
9
validIdx = deg > 0;
k = deg(validIdx);
[alpha, xmin, L] = plfit(k); % 使用 Clauset 等提出的最大似然估计方法

fprintf('幂律指数 α = %.3f, xmin = %d\n', alpha, xmin);

figure;
plplot(k, xmin, alpha);
title('幂律拟合结果');

若无 plfit 函数,可自行实现或使用简化线性拟合:

1
2
3
4
5
logk = log(bins_center(bins_center>0));
logP = log(counts(bins_center>0)/sum(counts));
coeffs = polyfit(logk, logP, 1);
gamma = -coeffs(1);
fprintf('拟合幂律指数 γ ≈ %.3f\n', gamma);

七、综合分析

特性 判断依据 结论示例
小世界 ( SWI > 1 )
无标度 度分布符合幂律 是(γ ≈ 2.5)

若网络同时满足以上两点,则说明其拓扑结构兼具局部聚集与全局稀疏的复杂性特征。


八、结论

本文从可视化入手,系统介绍了复杂网络的基础统计分析方法。
通过对聚类系数、路径长度、度分布及幂律拟合的分析,我们能够初步判断网络类型:

  • 小世界网络 → 局部紧密、全局高效;
  • 无标度网络 → 度分布长尾,存在“枢纽节点”;

这些特性不仅是理论研究的核心,也为后续的鲁棒性分析传播动力学仿真提供了基础。


九、下一篇预告

下一篇《复杂网络系列④:网络鲁棒性分析》
我们将深入探讨:

  • 网络在随机失效与攻击下的稳定性;
  • 节点介数、节点度、中心性等多种重要性指标。

敬请期待。

最后

我们开发了一个在线复杂网络计算平台:
👉 复杂网络分析平台

支持:

  • 上传邻接矩阵文件
  • 自动构建网络
  • 指标一键计算与可视化
  • AI 智能报告生成
,
© 2025 Three purple's blog All Rights Reserved. 本站总访客数 加载中... 人 | 本站总访问量 加载中...
Theme by hiero