计算思维项目:随机漫步II - 从帕斯卡三角形到概率分布演化
2025-07-10 07:38:23作者:卓炯娓
引言
本文将深入探讨计算思维项目中关于随机漫步的第二部分内容,重点介绍帕斯卡三角形与随机漫步概率分布演化之间的深刻联系。我们将从基础概念出发,逐步构建理解框架,最终实现概率分布随时间演化的可视化。
帕斯卡三角形与矩阵结构
帕斯卡三角形的数学本质
帕斯卡三角形是组合数学中的重要概念,其元素实际上是二项式系数:
pascal(N) = [binomial(n, k) for n = 0:N, k=0:N]
这个矩阵具有以下特性:
- 下三角结构:主对角线上方全为零
- 每个元素C(n,k)表示从n个元素中取k个的组合数
- 满足递推关系:C(n,k) = C(n-1,k-1) + C(n-1,k)
Julia中的特殊矩阵类型
Julia提供了多种特殊矩阵类型来处理这类结构化数据:
L = LowerTriangular(pascal(10)) # 下三角矩阵
sparse(pascal(10)) # 稀疏矩阵
这些特殊类型不仅优化了存储,还提供了特定的显示方式(如用点表示结构零)。
随机漫步的概率视角
从轨迹到概率分布
随机漫步可以看作是一系列独立同分布(IID)随机变量的累积和:
steps = rand((-1, +1), 10)
trajectory = cumsum(steps)
当我们考虑大量轨迹时,关注点转向概率分布随时间的变化。
概率演化的主方程
一维简单随机漫步的概率演化遵循:
pᵢᵗ⁺¹ = 0.5 × (pᵢ₋₁ᵗ + pᵢ₊₁ᵗ)
这实际上是一个卷积运算,与帕斯卡三角形的构建方式惊人地相似。
实现概率演化
初始条件设置
function initial_condition(n)
p₀ = zeros(n)
p₀[n ÷ 2 + 1] = 1 # 初始集中在中心点
return p₀
end
概率演化函数
function evolve(p)
p′ = similar(p)
for i in 2:length(p)-1
p′[i] = 0.5 * (p[i-1] + p[i+1])
end
p′[1] = 0 # 边界条件
p′[end] = 0
return p′
end
时间演化过程
function time_evolution(p0, N)
ps = [p0]
p = p0
for i in 1:N
p = evolve(p)
push!(ps, copy(p))
end
return ps
end
可视化技术
热图展示
M = reduce(hcat, ps)' # 将向量序列转换为矩阵
heatmap(M, yflip=true)
3D表面图
plotly() # 切换到交互式后端
surface(M)
堆叠直方图
更直观的展示方式:
begin
plot(leg=false)
for which in 1:15
for i in 1:length(ps[which])
plot!([which, which], [-grid_size÷2 + i, -grid_size÷2 + i],
[0, ps[which][i]], c=which, alpha=0.8, lw=2)
end
end
xlims!(1, 15)
plot!()
end
边界条件的物理意义
代码中设置的零边界条件(p′[1] = p′[end] = 0)对应于:
- 概率在边界处"逃逸"
- 模拟开放系统中的随机漫步行为
- 类似于化学物质从系统边缘扩散出去
教学启示
- 计算思维:将数学概念(帕斯卡三角形)与物理过程(随机漫步)通过计算联系起来
- 渐进式理解:从单一轨迹到概率分布,再到时间演化
- 可视化验证:多种图形展示方式帮助理解抽象概念
- 边界处理:展示实际问题中边界条件的重要性
结论
通过本项目,我们建立了从组合数学到概率论,再到数值模拟的完整链条。帕斯卡三角形不仅是数学上的优美结构,更揭示了随机漫步概率分布演化的本质特征。Julia语言的高效实现和丰富可视化工具使得这一探索过程既直观又深刻。
这种计算思维方法可以推广到更复杂的随机过程研究,为理解扩散过程、金融模型等提供了坚实基础。