最近看了一些网络传播扩展方面的内容,总结了网络扩散的数学理论以及相关实验。本博文主要介绍网络扩散的数学模型,下篇记录相关实验。
先定义一些符号,
- n=总人数
- I=已经扩散的人数
- $i=\frac{I}{n}$扩散占比
- S=还没哟扩散的人数
- $s=\frac{S}{n}$未扩散的占比
- $\beta$感染率
根据定义,容易得到$S+I=n,s+i=1$。
扩散模型可以微分方程表示,如下
\[\frac{dI}{dt} = \beta S \frac{I}{n}\]
扩散速率等于没有感染的人群遇到感染人群的概率并乘以感染率。将人数转成感染率,并且去掉S,可得到下面的微分方程
\[\frac{di}{dt} + \beta i^2 - \beta i = 0 \quad (1)\]
上面是一阶非线性微分方法,想办法转成线性微分方程才有办法解决,设$y=\frac{1}{i} \quad (2)$,将(2)代入(1)整理如下,
\[\frac{dy}{dt} + \beta y = \beta \quad (3)\]
现在是一阶非齐次线性微分方程,根据变系数线性微分方程通解,可以得到下面的关于y的方程
\[y=1+(C_1+C_2\beta)e^{-\beta t} \quad (4)\]
将(4)代入(2),得到关于感染率$i$的方程,
\[i = \frac{1}{1+(C_1+C_2\beta)e^{-\beta t}} \quad (5)\]
(5)式中,$C_1,C_2$是常量,$t$是时间,形状是个S,类似sigmoid函数,其中$\beta$控制收敛速率,$C_1,C_2$控制偏移,扩散曲线如下,第一组参数是sigmoid函数:
在上面的推导过程中,没有用到网络的任何特性,好像与网络没有什么关系。下一篇博文中,将会探讨网络中传播率与上面曲线的关系。
曲线生成代码(R语言)