如何用Excel模拟工具解决1/10概率的掷骰成功次数统计问题?
特殊骰子试验模拟方案
问题概述
我们需要模拟200万次(或50万次)试验:每次试验投掷一个10面骰子,直到掷出数字"3"(成功概率1/10),记录每次试验所需的投掷次数,最终统计成功出现在不同区间(如1-10次、11-20次等)的占比。
模拟思路
这是典型的几何分布问题:每次试验独立,成功概率固定为0.1,我们关注首次成功所需的试验次数。模拟步骤如下:
- 批量生成所有试验的首次成功次数
- 将次数分组到预设区间
- 计算每个区间内试验次数占总试验数的百分比
Python实现代码
使用numpy库可高效处理百万级别的模拟(比纯Python循环快得多):
import numpy as np # 配置参数 total_trials = 2_000_000 # 总试验次数,可改为500_000 success_prob = 0.1 # 掷出"3"的概率 intervals = [0, 10, 20, 30, 40, 50, np.inf] # 区间划分,可按需调整 interval_labels = ["1-10次", "11-20次", "21-30次", "31-40次", "41-50次", "50次以上"] # 生成所有试验的首次成功次数 # np.random.geometric返回首次成功所需的试验次数,完全匹配需求 trial_counts = np.random.geometric(success_prob, size=total_trials) # 统计各区间的试验次数 bin_counts, _ = np.histogram(trial_counts, bins=intervals) # 计算占比并输出结果 print(f"总试验次数: {total_trials}") print("各区间成功占比:") for label, count in zip(interval_labels, bin_counts): percentage = (count / total_trials) * 100 print(f"{label}: {percentage:.2f}%")
理论概率参考
为验证模拟结果准确性,可计算各区间的理论概率:
- 1-10次成功概率:$\sum_{k=1}^{10} (0.9)^{k-1} \times 0.1 = 1 - (0.9)^{10} \approx 65.13%$
- 11-20次成功概率:$(0.9)^{10} \times (1 - (0.9)^{10}) \approx 22.72%$
- 21-30次成功概率:$(0.9)^{20} \times (1 - (0.9)^{10}) \approx 7.92%$
模拟结果会接近这些理论值,试验次数越多,误差越小。
运行说明
- 确保已安装
numpy库(可通过pip install numpy安装) - 调整
total_trials参数可修改试验次数 - 修改
intervals和interval_labels可自定义区间划分
内容的提问来源于stack exchange,提问作者Nasraddin Afandi
相关产品推荐
相关产品推荐

