WARNING
🧪 Beta公测版本提示:教程主体已完成,正在优化细节,欢迎大家提Issue反馈问题或建议。
大数定律与中心极限 — Python / C++ 代码详解
Download demo.pyDownload clt.hppDownload demo.cpp
运行方式
bash
cd docs/math/clt/code
python demo.py
g++ -std=c++17 demo.cpp -o clt_demo两张图:clt_lln.png(运行均值贴 clt_hist.png(指数均值的三档直方图)。C++ 印
代码逐段详解(Python)
第1步:运行均值 — cumsum 一次做完
python
x = np.random.binomial(1, p, size=n)
running = np.cumsum(x) / np.arange(1, n + 1)cumsum:第项是前 次正面数。 - 除以
1..n:得到。不要写成 x.mean()一条水平线——那就看不见「慢慢老实」。 arange(1, n+1):从 1 起,避免除以 0。
第2步:CLT 直方图 — 对指数下手
指数
python
means = np.random.exponential(1.0 / lam, size=(n_rep, n)).mean(axis=1)- NumPy 的
exponential参数是尺度,不是速率。 时尺度也是 1。写反会让理论高斯对不上。 size=(4000, n)再mean(axis=1):每一行一次实验的个样本,压成 4000 个 。 - 红线是
,不是原指数密度。 时这条铃铛对指数是错的(故意画上,对照「CLT 还没生效」); 才该贴住。
横轴固定 [0,4]:指数均值很少到负数,左边界是 0 不是
C++:clt.hpp
最小 LCG:state = state * 1103515245 + 12345,再移位得到 1e-12。
n_rep=2000 的经验方差会在
可选 Eigen 在这里仍然帮不上:要的是随机数和均值,不是矩阵分解。
源码位置
docs/math/clt/code/demo.pydocs/math/clt/code/clt.hppdocs/math/clt/code/demo.cpp