沙堆模型(sandpile model)是根据一个简单的沙粒扩散规则来描述沙堆的累计和崩塌。当沙粒数量达到一定时,沙堆可呈现出明显的分形结构。除此之外,沙堆模型还包含很多有趣现象。
推荐阅读:The Amazing, Autotuning Sandpile、Sandgallery、Mommy Talk
规则
假设有一个无限大的正交网格,仅在某个固定格点处逐粒放沙。如下图所示,当某一格点中的沙粒的数量达到4时,这个格点发生崩塌,减去4颗沙粒,并将这4颗沙粒等分给上下左右的4个格点。
\[ \boxed{\begin{matrix} 0 & 0 & 0 \\ 0 & \textcolor{red}{4} & 0 \\ 0 & 0 & 0 \end{matrix}} \quad\Longrightarrow\quad \boxed{\begin{matrix} 0 & \textcolor{red}{1} & 0 \\ \textcolor{red}{1} & 0 & \textcolor{red}{1} \\ 0 & \textcolor{red}{1} & 0 \end{matrix}} \]
按照上面的规则,沙堆模型会在不断地累计与崩塌之间逐渐扩大。
分形
一百万粒沙
整个沙堆稳定后,格点中的沙粒数只有4个状态:3、2、1、0。将这四种状态分别用4种颜色代替,即:
三粒沙:亮红色,即RGB = #F40000 = [244,0,0] |
两粒沙:橘黄色,即RGB = #FF7F00 = [255,127,0] |
一粒沙:亮黄色,即RGB = #FFF200 = [255,255,32] |
零粒沙:纯白色,即RGB = #FFFFFF = [255,255,255] |
当落下一百万粒沙(\(10^6\)),沙堆累计的可视化过程如下
一百万粒沙的沙堆具有较明显的分形结构,沙堆效果如下
十亿粒沙
当落下十亿粒沙(\(10^9\)),具有很明显的分形效果,沙堆效果如下
上图来自Sandgallery
分析
分析一百万粒沙累计过程的数据。
格点总数-沙粒总数
格点总数:沙堆所占区域的总格点数(包括内部零沙粒格点,但不包括外部零沙粒格点)
十亿粒沙的沙堆图中蓝色部分为外部零沙粒格点
沙粒总数:沙堆中沙粒的总数量
例如下图中的沙粒总数为7,格点总数为5。 \[ \boxed{\begin{matrix} & 1 & \\ 1 & 3 & 1 \\ & 1 & \end{matrix}} \]
线性关系
单格平均沙粒数-沙粒总数
- 单格平均沙粒数:沙粒总数 / 格点总数
单格平均沙粒数稳定到2.30左右?
二八定律
沙堆的沙粒总数记为 \(M\),格点总数记为 \(N\),格点中沙粒数为 \(k\) 的格点共有 \(n\) 个,于是
- 沙粒数为 \(k\) 的数量分布定义为 \(nk/M\)
- 沙粒数为 \(k\) 的格点分布定义为 \(n/N\)
沙粒数为3的数量分布稳定到0.8左右?
沙粒数为3的格点分布稳定到0.6左右?
二八定律是一个社会现象,其中一条是“20%的人掌握着80%的财富”。
对于本文所计算的一百万粒沙,对应为“60%的格点掌握着80%的沙粒”。
程序
MATLAB程序:
1 | %% 10^5颗沙粒的累计过程 |