第 6–7 章 · 特殊函数与随机数
这两章是"基础设施":特殊函数是科学计算的三角函数表,随机数是蒙特卡洛的原料。它们不显眼,但坏掉一个全盘皆输。
特殊函数的可靠计算
伽马函数 $\Gamma(x)$(阶乘的推广,Lanczos 逼近)、贝塞尔函数 $J_n, Y_n$(递推 + 归一,防止向下递推发散)、误差函数 $\mathrm{erf}$、完全/不完全椭圆积分……要点只有一条:用经过验证的有理/切比雪夫逼近,不要自己现场推导。递推计算时注意方向:贝塞尔 $J$ 向下递推稳定、$Y$ 向上稳定——方向错了误差指数放大。
均匀随机数:一切随机的源头
计算机给不出真随机,给的是确定性递推的伪随机序列,评价标准是统计性质与周期:
- 老式的线性同余 $x_{n+1} = (ax_n + c)\bmod m$:低位质量差、周期短,教学用。
- 现代标配:梅森旋转(MT19937,周期 $2^{19937}-1$)或 PCG/xoshiro 家族——工程默认。
- 永远不要用 "rand() % n" 取模造均匀整数(低位偏差),用拒绝采样。
任意分布的采样三法
- 逆变换法:$x = F^{-1}(u)$,$u\sim U(0,1)$——最通用,要求逆函数可算。
- 接受-拒绝:用易采样包络 $g$ 套住目标 $f$,拒绝率可控则高效。
- Box-Muller:两个均匀数变换出一对正态数——正态采样的经典配方。
老师的提醒
- 并行/重复实验的随机数:用固定种子做可复现实验,用流分割(跳过/子序列)避免并行流重叠——重叠的流是隐性灾难。
- 统计检验(卡方、频谱检验)对自研生成器是必做项;用现成 MT/PCG 则可跳过。
自检
- 贝塞尔函数递推方向错了会怎样?
- 逆变换法与接受-拒绝法各自的适用条件?
- 为什么 "rand() % n" 有偏差?
更深一层:随机数质量是蒙特卡洛的"地基工程"
第 7 章最容易被轻视、又最致命的一节:随机数生成器的缺陷会伪装成物理结论。历史教训:早期线性同余生成器(如著名的 RANDU)在三维空间里所有点落在 15 个平面上——用它做的分子模拟、蒙特卡洛积分全带系统偏差。现代工程底线:用 MT19937、PCG 或 xoshiro 家族;并行场景用流分割(每线程独立子序列,PCG 的流参数或跳位函数)而非"线程号做种子"(相邻种子流高度相关)。检验手段(对自研生成器):TestU01 套件是行业金标准。
均匀数之上,任意分布采样的三法各有性格:逆变换(最通用、单调保序、但要逆函数;正态用 Acklam 算法数值逆)、接受-拒绝(普适但拒绝率 = 面积比,包络选不好就慢)、专用变换(Box-Muller 正态、Gamma 的 Marsaglia-Tsang——快而精)。多维相关分布用 Copula 或条件采样(Gibbs)。
推导细读:蒙特卡洛积分的误差标度与方差缩减
蒙特卡洛积分 $\int f \approx V\langle f\rangle \pm V\sigma_f/\sqrt{N}$——误差 $\propto N^{-1/2}$ 与维度无关,这是它统治高维积分的根本原因(确定性求积在 $d$ 维需要 $m^d$ 个点)。但 $N^{-1/2}$ 的"常数项"就是方差 $\sigma_f^2$,方差缩减技术由此定价:重要性采样(按 $|f|$ 的形状采样,方差降一个量级起)、对偶变量(正相关配对取平均)、控制变量(减去已知积分的相关函数)、拟蒙特卡洛(低差异序列替代随机点,误差 $\sim N^{-1}\log^d N$——平滑函数上白赚一个量级)。金融工程的定价加速、物理的路径积分、渲染的全局光照,全是这四板斧的组合。
在真实世界里:一次粒子输运模拟的方差缩减实战
辐射输运(屏蔽设计)是方差缩减的教科书战场:穿透概率可能是 $10^{-6}$ 量级——朴素模拟要 $10^{10}$ 个粒子才有统计意义。行业配方:重要性偏置(深穿透方向加大权重)+ 俄罗斯轮盘与分裂(低权重粒子分裂/轮盘淘汰,保持总权重无偏)+ DXTRAN 球(探测点周围强制采样)。结果:同样算力下方差降 4-6 个数量级。方法论迁移:任何"稀有事件统计"(网络可靠性、尾部风险)都套同一框架——让模拟多看你关心的区域,再用权重把无偏性找回来。
专题深入:随机数生成器的"历史灾难"与现代标准
随机数生成器的历史灾难值得作为警示录:早期线性同余生成器(RANDU)在三维空间里所有点落在 15 个平面上——用它做的分子模拟、蒙特卡洛积分全带系统偏差。这个灾难的教训是深远的:随机数生成器的缺陷会伪装成模型结论——你的物理定律可能是对的,但生成器的格纹让结果系统偏差。现代标配:梅森旋转(MT19937,周期 $2^{19937}-1$)或 PCG/xoshiro 家族——工程默认。并行/重复实验的随机数纪律:固定种子做可复现实验 + 流分割(跳过/子序列)避免并行流重叠——重叠的流是隐性灾难。
数学细节展开:蒙特卡洛积分的"$N^{-1/2}$ 与维度无关"
蒙特卡洛积分的误差 $\propto N^{-1/2}$ 与维度无关——这是它统治高维积分的根本原因(确定性求积在 $d$ 维需要 $m^d$ 个点)。但常数项是方差 $\sigma_f^2$——方差缩减技术由此定价:重要性采样(按 $|f|$ 的形状采样)、对偶变量(正相关配对取平均)、控制变量(减去已知积分的相关函数)、拟蒙特卡洛(低差异序列——$N^{-1}\log^d N$)。金融工程的定价加速、物理的路径积分、渲染的全局光照——全是这四板斧的组合。
工程案例细节:稀有事件模拟的"重要性偏置"
辐射输运(屏蔽设计)是方差缩减的教科书战场:穿透概率可能是 $10^{-6}$ 量级——朴素模拟要 $10^{10}$ 个粒子才有统计意义。行业配方:重要性偏置(深穿透方向加大权重)+ 俄罗斯轮盘与分裂(低权重粒子分裂/轮盘淘汰,保持总权重无偏)+ DXTRAN 球(探测点周围强制采样)。"让模拟多看你关心的区域,再用权重把无偏性找回来"——这个方法论迁移到网络可靠性、尾部风险、任何"稀有事件统计"都适用。
例题
用逆变换法从 $U\sim U(0,1)$ 采样参数 $\lambda = 2$ 的指数分布 $f(x) = 2e^{-2x}$。写出变换并计算 $u = 0.3$ 对应的样本。
解答
CDF:$F(x) = 1 - e^{-2x}$。令 $F(x) = u$:
(等价地可用 $-\ln u/2$,因为 $1-u$ 与 $u$ 同分布。)
$u = 0.3$:$x = -\ln(0.7)/2 = 0.357/2 \approx 0.1785$。
验证:$P(X \le 0.1785) = 1 - e^{-0.357} = 0.3$ ✓。逆变换法要求 $F^{-1}$ 有闭式或可数值求逆;否则用接受-拒绝法。