目录

Polya 罐蒙特卡洛模拟

概率论(大二下)课程作业:Polya 罐模型抽取概率恒定性的理论证明与蒙特卡洛数值验证。

任务背景

Polya 罐模型:罐中初始有 a 个白球、b 个黑球,每次随机抽取一球观察颜色后放回, 并再加入 c 个与所抽球同色的球。作业要求证明:对任意 k ≥ 1,第 k 次抽取到白球的 概率恒为初始比例 a/(a+b),与 k 和 c 无关。

理论部分用数学归纳法:按第一次抽白(A₁)与抽黑(A₁’)划分样本空间,结合归纳假设与 全概率公式可得 P(Ak) = (a+c)/(a+b+c) · a/(a+b) + a/(a+b+c) · b/(a+b) = a/(a+b)。

数值部分用蒙特卡洛模拟验证:初始白 4 黑 3(理论概率 4/7 ≈ 57.14%),每次加 2 个 同色球,独立重复大量试验(最多 1e8 次),统计每一步抽到白球的频率及其标准差。 结论:无论罐中球数如何增长,各次抽取的白球频率始终稳定在初始比例附近, 与理论推导一致。

代码先后经历三个版本迭代:基础版只统计频率;第二版增加平方和统计以计算标准差, 并把抽球次数缩到 20 以便跑 1e8 次大样本;第三版恢复 1000 步抽取并在相对路径输出图。

内容结构

文件 说明
Polya_Sim.py 基础版:统计各步白球频率并绘制散点图,1000 次模拟 × 10000 步
Polya_Sim2.py 迭代版:新增标准差统计,tqdm 进度条,1e8 次模拟 × 20 步
Polya_Sim3 - online.py 最终版:1e8 次模拟 × 1000 步,图片保存到当前目录
README.md 本说明文件

注:实验报告 docx、理论推导手写图与模拟结果 png 未入库,模型与结论已在上方概述。

运行方法

依赖:Python 3,第三方库仅 matplotlib、tqdm(标准库 random 无需安装)。

pip install matplotlib tqdm
python Polya_Sim.py
python Polya_Sim2.py
python "Polya_Sim3 - online.py"

注意事项:

  • 脚本内置参数为白 4 黑 3、每次加 2 球;如需改配置,直接修改文件底部的参数区。
  • Polya_Sim.py 与 Polya_Sim2.py 中 plt.savefig 写死了 D:\Desktop\... 绝对路径, 在其他机器运行前请先改成自己的输出路径;Polya_Sim3 - online.py 输出到当前目录。
  • 后两个版本默认 1e8 次模拟,纯 Python 循环耗时较长,可先把 num_simulations 调小试跑。
  • 图中中文标题依赖 SimHei 字体,非 Windows 环境需自行替换 font.sans-serif 设置。

来源声明

  • 课程与题目:本校概率论课程作业(作业一),题目要求见上,推导与代码均为本人独立完成。
  • 模拟思路为课程通用方法(随机数 + 频率统计),未使用他人代码框架。
  • 仓库整理时对文件做了筛选(仅保留三个模拟脚本),脚本内容保持提交时原样。
关于

概率论作业:Polya 罐模型蒙特卡洛模拟,三个迭代版本与推导

30.0 KB
邀请码
    Gitlink(确实开源)
  • 加入我们
  • 官网邮箱:gitlink@ccf.org.cn
  • QQ群
  • QQ群
  • 公众号
  • 公众号

版权所有:中国计算机学会技术支持:开源发展技术委员会
京ICP备13000930号-9 京公网安备 11010802047560号