蒙地卡羅積分

在数学中，蒙特卡罗积分（Monte Carlo integration）是一种使用随机数进行数值积分的技术。它是一种特殊的蒙特卡罗方法，可对定积分进行数值计算。其他算法通常在规则网格上评估被积函数，而蒙特卡洛随机选择被积函数评估的点。 该方法对于高维积分特别有用。 进行蒙特卡罗积分的方法有多种，例如均匀采样、分层采样、重要性采样、顺序蒙特卡罗（也称为粒子滤波器）和平均场粒子方法。 在数值积分中，梯形法则等方法使用确定性方法。另一方面，蒙特卡罗积分采用非确定性方法：每种实现都提供不同的结果。在蒙特卡罗中，最终结果是带有各自误差线的正确值的近似值，并且正确值很可能在这些误差线内。 考虑函数 I = ∫ Ω f ( x ¯ ) d x ¯ {\displaystyle I=\int _{\Omega }f({\overline {\mathbf {x} }})\,d{\overline {\mathbf {x} }}} 其中 Ω 是 R m {\displaystyle \mathbb {R} ^{m}} 的一个子集，它的体积是： V = ∫ Ω d x ¯ {\displaystyle V=\int _{\Omega }d{\overline {\mathbf {x} }}} 朴素的蒙特卡罗方法是在Ω上均匀采样点： 给定N个均匀样本， x ¯ 1 , ⋯ , x ¯ N ∈ Ω , {\displaystyle {\overline {\mathbf {x} }}_{1},\cdots ,{\overline {\mathbf {x} }}_{N}\in \Omega ,} I可以被近似为： I ≈ Q N ≡ V 1 N ∑ i = 1 N f ( x ¯ i ) = V ⟨ f ⟩ . {\displaystyle I\approx Q_{N}\equiv V{\frac {1}{N}}\sum _{i=1}^{N}f({\overline {\mathbf {x} }}_{i})=V\langle f\rangle .} 这是因为大数定律确保以下结论成立： lim N → ∞ Q N = I . {\displaystyle \lim _{N\to \infty }Q_{N}=I.} 我们使用I给出QN的I估计， QN的误差线（error bars）可以使用方差的无偏估计通过样本方差来估计。 V a r ( f ) ≡ σ N 2 = 1 N − 1 ∑ i = 1 N ( f ( x ¯ i ) − ⟨ f ⟩ ) 2 . {\displaystyle \mathrm {Var} (f)\equiv \sigma _{N}^{2}={\frac {1}{N-1}}\sum _{i=1}^{N}\left(f({\overline {\mathbf {x} }}_{i})-\langle f\rangle \right)^{2}.} 由此可得： V a r ( Q N ) = V 2 N 2 ∑ i = 1 N V a r ( f ) = V 2 V a r ( f ) N = V 2 σ N 2 N . {\displaystyle \mathrm {Var} (Q_{N})={\frac {V^{2}}{N^{2}}}\sum _{i=1}^{N}\mathrm {Var} (f)=V^{2}{\frac {\mathrm {Var} (f)}{N}}=V^{2}{\frac {\sigma _{N}^{2}}{N}}.} 只要以下序列 { σ 1 2 , σ 2 2 , σ 3 2 , … } {\displaystyle \left\{\sigma _{1}^{2},\sigma _{2}^{2},\sigma _{3}^{2},\ldots \right\}} 是有界的，该方差就会逐渐减小到零，即 1/N 。 那么，QN的误差估计就是： δ Q N ≈ V a r ( Q N ) = V σ N N , {\displaystyle \delta Q_{N}\approx {\sqrt {\mathrm {Var} (Q_{N})}}=V{\frac {\sigma _{N}}{\sqrt {N}}},} 我们看到，QN的误差是自身的 1 N {\displaystyle {\tfrac {1}{\sqrt {N}}}} ，这是平均值的标准误差乘以 V {\displaystyle V} 。该结果不依赖于积分的维数，这是蒙特卡洛积分相对于大多数指数依赖维数的确定性方法所具有的优势。 值得注意的是，与确定性方法不同，误差的估计不是严格的误差界限；随机抽样可能无法揭示被积函数的所有重要特征，从而导致误差的低估。 虽然朴素蒙特卡罗适用于简单的示例，但对确定性算法的改进只能通过使用特定于问题的采样分布的算法来实现。通过适当的样本分布，可以利用以下事实：几乎所有高维被积函数都是非常局部化的，并且只有小子空间对积分有显着贡献。 蒙特卡罗文献的很大一部分致力于开发改进误差估计的策略。特别是，分层采样（将区域划分为子域）和重要性采样（从非均匀分布中采样）是此类技术的两个示例。 使用蒙特卡洛方法最典型的例子是估计π。 我们考虑以下函数： H ( x , y ) = { 1 if  x 2 + y 2 ≤ 1 0 else {\displaystyle H\left(x,y\right)={\begin{cases}1&{\text{if }}x^{2}+y^{2}\leq 1\\0&{\text{else}}\end{cases}}} 即正方形集合Ω=[−1,1]×[−1,1]的体积是V = 4。 因此，使用蒙特卡罗积分计算π值的粗略方法是在Ω上选取N个随机数并计算： Q N = 4 1 N ∑ i = 1 N H ( x i , y i ) {\displaystyle Q_{N}=4{\frac {1}{N}}\sum _{i=1}^{N}H(x_{i},y_{i})} 右图中，相对误差 Q N − π π {\displaystyle {\tfrac {Q_{N}-\pi }{\pi }}} 被认为是一个关于N的函数，由此确认 1 N {\displaystyle {\tfrac {1}{\sqrt {N}}}} 。 请记住，以下的程序需要真正的随机数生成器。 int i, throws = 99999, insideCircle = 0; double randX, randY, pi; srand(time(NULL)); for (i = 0; i < throws; ++i) { randX = rand() / (double) RAND_MAX; randY = rand() / (double) RAND_MAX; if (randX * randX + randY * randY < 1) ++insideCircle; } pi = 4.0 * insideCircle / throws; from numpy import random import numpy as np throws = 2000 inside_circle = 0 i = 0 radius = 1 while i < throws: # Choose random X and Y centered around 0,0 x = random.uniform(-radius, radius) y = random.uniform(-radius, radius) # If the point is inside circle, increase variable if x**2 + y**2 <= radius**2: inside_circle += 1 i += 1 # Calculate area and print; should be closer to Pi with increasing number of throws area = (((2 * radius) ** 2) * inside_circle) / throws print(area) 拟蒙特卡罗方法 蒙特卡洛辅助场 统计物理中的蒙特卡罗方法 蒙特卡罗方法 减小方差（英语：Variance reduction） Press et al. 2007 Press et al. 2007 Newman & Barkema 1999 Newman & Barkema 1999 MacKay 2003   Caflisch, R. E. Monte Carlo and quasi-Monte Carlo methods. Acta Numerica. 1998, 7: 1–49. Bibcode:1998AcNum...7....1C. S2CID 5708790. doi:10.1017/S0962492900002804.  Weinzierl, S. Introduction to Monte Carlo methods. 2000. arXiv:hep-ph/0006269 .  Press, W. H.; Farrar, G. R. Recursive Stratified Sampling for Multidimensional Monte Carlo Integration. Computers in Physics. 1990, 4 (2): 190. Bibcode:1990ComPh...4..190P. doi:10.1063/1.4822899 .  Lepage, G. P. A New Algorithm for Adaptive Multidimensional Integration. Journal of Computational Physics. 1978, 27 (2): 192–203. Bibcode:1978JCoPh..27..192L. doi:10.1016/0021-9991(78)90004-9.  Lepage, G. P. VEGAS: An Adaptive Multi-dimensional Integration Program. Cornell Preprint CLNS 80-447. 1980.  Hammersley, J. M.; Handscomb, D. C. Monte Carlo Methods. Methuen. 1964. ISBN 978-0-416-52340-9.  Kroese, D. P.; Taimre, T.; Botev, Z. I. Handbook of Monte Carlo Methods. John Wiley & Sons. 2011.  Press, WH; Teukolsky, SA; Vetterling, WT; Flannery, BP. Numerical Recipes: The Art of Scientific Computing 3rd. New York: Cambridge University Press. 2007. ISBN 978-0-521-88068-8.  MacKay, David. chapter 4.4 Typicality & chapter 29.1 (PDF). Information Theory, Inference and Learning Algorithms. Cambridge University Press. 2003 [2024-03-15]. ISBN 978-0-521-64298-9. MR 2012999. （原始内容存档于2016-02-17）.  Newman, MEJ; Barkema, GT. Monte Carlo Methods in Statistical Physics. Clarendon Press. 1999.  Robert, CP; Casella, G. Monte Carlo Statistical Methods 2nd. Springer. 2004. ISBN 978-1-4419-1939-7.  Café math : Monte Carlo Integration : A blog article describing Monte Carlo integration (principle, hypothesis, confidence interval) Boost.Math : Naive Monte Carlo integration: Documentation for the C++ naive Monte-Carlo routines Monte Carlo applet applied in statistical physics problems[失效連結]