复杂网络仿真入门到精通2: 构建网络(邻接矩阵)

系列文章:

  • 系列合集
  • 下一篇预告:网络可视化与基础统计分析

💡 引言

在复杂网络研究中,“网络构建” 是一切分析与建模的起点。
无论你要研究传播、鲁棒性还是社团结构,第一步都必须拥有一个可计算、可分析的网络结构。而且后续我们的研究,也是研究这个目标网络的特性。
本文以Matlab代码为实例,进行代码说明。

从研究角度看,网络的构建主要分为两类:

① 模拟网络(Synthetic Network) —— 基于模型算法生成;
② 实体网络(Empirical Network) —— 来自现实数据的网络。

两类方式各有侧重:

  • 模拟网络用于理论研究与算法验证;
  • 实体网络用于真实系统建模与特性分析。

而无论哪种方式,最终的核心数据结构都是:邻接矩阵(Adjacency Matrix),邻接表也是可以的。


🧩 一、邻接矩阵的基本形式

假设我们有 ( N ) 个节点,网络可以用一个 ( N \times N ) 的矩阵 ( A ) 表示:

$$
A_{ij} =
\begin{cases}
1, & \text{节点 } i \text{ 与 } j \text{ 有边相连} \
0, & \text{节点 } i \text{ 与 } j \text{ 无连接}
\end{cases}
$$

  • 对于无向网络:矩阵对称$A_{ij} = A_{ji}$;
  • 对于有向网络:矩阵一般不对称;
  • 对于加权网络:$A_{ij}$ 可取任意实数权重。

表达矩阵和后续计算 一般有两种方式:

  1. 使用二维矩阵(doublesparse)来存储邻接矩阵,并以矩阵形式进行后续计算。
  2. 使用邻接矩阵或者邻接表构建图对象(G),并使用这个对象进行后续计算。

🧠 二、构建网络的两条主线

(一)模拟网络(Synthetic Networks)

模拟网络通过算法或数学模型生成人工网络,用于验证理论或测试算法表现。
常见模型包括:

网络类型 特点 MATLAB 构建方式
随机网络(Erdős–Rényi, ER) 边以固定概率 p 随机生成 sprand(N, N, p)
小世界网络(Watts–Strogatz, WS) 高聚类 + 短路径 wattsStrogatz(N, K, p)
无标度网络(Barabási–Albert, BA) 幂律度分布,存在 Hub 节点 pref 或自编生长算法

✅ 示例:随机网络(ER)模型

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
N = 10;      % 节点数
p = 0.3; % 边存在的概率
A = rand(N) < p; % 随机连接
A = triu(A,1); % 取上三角避免重复
A = A + A'; % 对称化成无向网络
G = graph(A);
plot(G, 'Layout', 'force');
title('Erdős–Rényi 随机网络');
````

#### ✅ 示例:小世界网络(WS)模型

```matlab
N = 20; K = 4; p = 0.1;
G = wattsStrogatz(N, K, p);
plot(G, 'Layout', 'force');
title('Watts–Strogatz 小世界网络');
A = adjacency(G);

✅ 示例:无标度网络(BA)模型

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
N = 20; m = 2;
A = zeros(N);
for i = 1:(m+1)
for j = (i+1):(m+1)
A(i,j)=1; A(j,i)=1;
end
end

for i = (m+2):N
degree = sum(A);
prob = degree / sum(degree);
selected = randsample(1:i-1, m, true, prob);
A(i, selected) = 1; A(selected, i) = 1;
end

G = graph(A);
plot(G, 'Layout', 'force');
title('Barabási–Albert 无标度网络');

这些网络模型是复杂网络研究的基础模型,可用于:

  • 验证算法;
  • 分析理论特性;
  • 模拟不同网络拓扑下的行为。

(二)实体网络(Empirical Networks)

实体网络来源于真实世界的数据,是复杂系统的映射结果。

常见来源包括:

领域 示例 数据格式
社会网络 微信、微博、协作网络 .csv, .edge, .gml
生物网络 蛋白质相互作用网络 .graphml, .mat
技术网络 电网、交通网络、互联网 .txt, .json
科研网络 引文、合作、知识图谱 .csv, .gml

✅ 示例:从边列表构建实体网络

假设你有一个 edges.csv 文件:

Source Target
1 2
1 3
2 4
3 4

MATLAB 构建代码:

1
2
3
4
5
6
7
8
9
10
11
12
data = readtable('edges.csv');
edges = table2array(data(:,1:2));
N = max(edges(:));
A = zeros(N,N);
for k = 1:size(edges,1)
i = edges(k,1); j = edges(k,2);
A(i,j) = 1; A(j,i) = 1; % 无向图
end

G = graph(A);
plot(G, 'Layout', 'force');
title('实体网络示例');

✅ 示例:从 .gml 文件导入网络

1
2
3
G = importgraph('network.gml'); % MATLAB R2023a 起支持
A = adjacency(G);
plot(G);

✅ 示例:从实验或观测矩阵直接读取

1
2
3
4
A = load('brain_connectivity.mat');  % 神经连接矩阵
G = graph(A);
plot(G, 'Layout', 'circle');
title('大脑功能连接网络');

🔍 三、邻接矩阵的验证与操作

当你成功构建网络后,建议进行基本验证:

1
2
3
4
N = size(A,1);
M = nnz(triu(A)); % 边数
degree = sum(A,2); % 各节点度
fprintf('节点数: %d, 边数: %d\n', N, M);

如果矩阵非常稀疏(多数为 0),可转换为稀疏存储:

1
A = sparse(A);

🧭 四、延伸阅读:网络构建策略对分析结果的影响

不同的构建方式会显著影响分析结论:

  • 模拟网络适合研究拓扑理论与算法鲁棒性;
  • 实体网络则能反映真实系统特征与动力学规律。

研究者常在模拟网络上测试方法性能,再在实体网络上验证泛化能力。


⚙️ 五、在线构建与分析平台

我们在平台中提供了一个简易入口:
👉 复杂网络分析平台 - 构建与计算

支持:

  • 上传边表 / 邻接矩阵文件
  • 自动构建网络
  • 指标一键计算与可视化
  • AI 智能报告生成

📘 总结

构建网络是复杂网络研究的起点。
模拟网络实体网络,你可以:

  • 用 MATLAB 生成理想拓扑结构;
  • 从真实数据中提取结构信息;
  • 最终得到可分析、可以可视化的邻接矩阵。

下一篇预告:

  • 复杂网络入门到精通(三)—— 网络可视化与基础统计
  • 我们将使用 MATLAB 展示网络图形化与分布特征。
,
© 2025 Three purple's blog All Rights Reserved. 本站总访客数 加载中... 人 | 本站总访问量 加载中...
Theme by hiero