Monte Carlo 方法计算的理论基础

  • 1.理论目标
  • 2.收敛性的描述
  • 3.误差的描述与控制
  • 4.减少误差的技巧
  • 5.代码的实现

1.理论目标

​ 利用辛钦大数定律中心极限定理对MentoCarloMento CarloMentoCarlo方法的收敛性和误差进行定量的描述。

2.收敛性的描述

​ 若随机变量Xi(i=1,2,...N)X_i(i=1,2,...N)Xi​(i=1,2,...N)是独立同分布的随机变量,其期望值Ex<∞Ex<\inftyEx<∞,由辛钦大数定律计算可以得到如下关系,∀ϵ>0:\forall \epsilon>0:∀ϵ>0:
limN→∞P{∣1N∑i=1NXi−Ex∣<ϵ}=1lim_{N\rightarrow\infty}P\{|\frac{1}{N}\sum_{i=1}^{N}X_i-Ex|<\epsilon\}=1 limN→∞​P{∣N1​i=1∑N​Xi​−Ex∣<ϵ}=1
​ 如果我们设:
X‾N=1N∑i=1NXi\overline{X}_N=\frac{1}{N}\sum_{i=1}^NX_i XN​=N1​i=1∑N​Xi​
​ 那么当N→∞N\rightarrow \inftyN→∞时,X‾N\overline{X}_NXN​依概率111收敛到ExExEx。这就是其收敛性的数学基础。

3.误差的描述与控制

​ 若随机变量Xi(i=1,2,...N)X_i(i=1,2,...N)Xi​(i=1,2,...N)是独立同分布的随机变量,且具有误差σ2(σ2≠0)\sigma^2(\sigma^2\ne0)σ2(σ2​=0),且:
σ2=∫−∞∞(x−Ex)2f(x)dx<∞\sigma^2=\int_{-\infty}^{\infty}(x-Ex)^2f(x)dx<\infty σ2=∫−∞∞​(x−Ex)2f(x)dx<∞
​ 其中:ExExEx为数学期望,f(x)f(x)f(x)为XiX_iXi​的概率密度函数。

​ 如果我们设样本个数为NNN,且X‾N=1N∑i=1NXi\overline{X}_N=\frac{1}{N}\sum_{i=1}^NX_iXN​=N1​∑i=1N​Xi​,由中心极限定理:
limn→∞∑i=1NXi∼N(NEx,Nσ2)lim_{n \rightarrow \infty}\sum_{i=1}^NX_i \sim N(NEx,N\sigma^2) limn→∞​i=1∑N​Xi​∼N(NEx,Nσ2)
​ 得到如下的数学关系:
limN→∞P{∣∑i=1NXi−NExNσ2∣<λa}=12π∫−λaλae−t22dtlim_{N \rightarrow \infty}P\{|\frac{\sum_{i=1}^NX_i-NEx}{\sqrt{N\sigma^2}}|<\lambda_a\}=\frac{1}{\sqrt{2\pi}}\int_{-\lambda_a}^{\lambda_a}e^{-\frac{t^2}{2}}dt limN→∞​P{∣Nσ2​∑i=1N​Xi​−NEx​∣<λa​}=2π​1​∫−λa​λa​​e−2t2​dt
​ 化简一下:
limN→∞P{∣X‾N−Ex∣<λaσN}=22π∫0λae−t22dt=1−αlim_{N\rightarrow\infty}P\{|\overline{X}_N-Ex|<\frac{\lambda_a \sigma}{\sqrt{N}}\}=\frac{2}{\sqrt{2\pi}}\int_0^{\lambda_a}e^{-\frac{t^2}{2}}dt=1-\alpha limN→∞​P{∣XN​−Ex∣<N​λa​σ​}=2π​2​∫0λa​​e−2t2​dt=1−α
​ 其中,α\alphaα为置信度,当α=0.5,0.05,0.003\alpha=0.5,0.05,0.003α=0.5,0.05,0.003时,λa\lambda_aλa​分别对应于0.6745,1.96,30.6745,1.96,30.6745,1.96,3。

​ 因此我们可以给出误差的定量描述:∣X‾N−Ex∣<λaσN|\overline{X}_N-Ex|<\frac{\lambda_a\sigma}{\sqrt{N}}∣XN​−Ex∣<N​λa​σ​以1−α1-\alpha1−α的概率成立。而且误差的收敛速度的阶数为O(N−12)O(N^{-\frac{1}{2}})O(N−21​)。因此到后面随着NNN的增加,误差收敛的速度会越来越慢。

​ 如果我们做一下定义ϵ\epsilonϵ为误差:
ϵ=λaσN\epsilon = \frac{\lambda_a\sigma}{\sqrt{N}} ϵ=N​λa​σ​
​ 那么要想控制NNN使得误差以1−α1-\alpha1−α的概率小于ϵ\epsilonϵ,那么:
N>(λaσϵ)2N>(\frac{\lambda_a\sigma}{\epsilon})^2 N>(ϵλa​σ​)2
​ 或者控制σ\sigmaσ使得误差以1−α1-\alpha1−α的概率小于ϵ\epsilonϵ,那么:
σ<Nϵλa\sigma<\frac{\sqrt{N}\epsilon}{\lambda_a} σ<λa​N​ϵ​
​ 如果要控制NNN的话,那我们就得计算σ\sigmaσ的值,然而σ\sigmaσ的值不太好计算。我们就用下面的式子做σ\sigmaσ的无偏估计:
σ^=1N∑i=1NXi2−(1N∑i=1NXi)2\hat{\sigma} = \sqrt{\frac{1}{N}\sum^N_{i=1}X_i^2-(\frac{1}{N}\sum_{i=1}^NX_i)^2} σ^=N1​i=1∑N​Xi2​−(N1​i=1∑N​Xi​)2​

4.减少误差的技巧

​ 在给定置信度α\alphaα后,ϵ\epsilonϵ由σ\sigmaσ和NNN共同决定,那么增大NNN和减小σ\sigmaσ都可以减小误差ϵ\epsilonϵ。但是,ϵ\epsilonϵ随和NNN却是呈现平方反比的关系。因此单纯的增大NNN效果并不明显,还得想办法减小σ\sigmaσ的值来减小误差。

关于减少σ\sigmaσ的各种技巧,本篇博文就不再赘述。

5.代码的实现

要求计算∭Ωx2dV\iiint_{\Omega}x^2dV∭Ω​x2dV,其中Ω:{(x,y,z)∣x2+y2≤z≤1}\Omega:\{(x,y,z)|\sqrt{x^2+y^2}\leq z\leq 1\}Ω:{(x,y,z)∣x2+y2​≤z≤1}。并且给出误差的动态描述。规定α=0.05\alpha = 0.05α=0.05。

#计算Mentor Carlo积分
import random
import matplotlib.pyplot as plt
import math
def Cal_cul(x,y,z):if (z<1)&(z>=math.sqrt(x**2+y**2)):return x**2else:return 0def lambdaTable(alpha):if alpha==0.5:return 0.6745elif alpha == 0.05:return 1.96else:return 3def int3Cul(a,b,c,Numbers,alpha):V = 2*a*2*b*csum1 = 0sum2 = 0lambda_a = lambdaTable(alpha)for i in range(Numbers):x = -a+2*a*random.random()y = -b+2*b*random.random()z = c*random.random()sum1 += Cal_cul(x,y,z)sum2 += (Cal_cul(x,y,z))**2int3Value = V*1/Numbers*sum1sigma = math.sqrt(1/Numbers*sum2-(1/Numbers*sum1)**2)error = lambda_a*sigma/math.sqrt(Numbers)print('在试验次数为{:}的情况下,计算的积分值是{:.3f},有{:.2f}的概率认为误差小于{:.5f}'.format(Numbers,int3Value,1-alpha,error))if __name__== '__main__':int3Cul(1,1,1,10000,0.05)

输出的结果是:

在试验次数为10000的情况下,计算的积分值是0.159,有0.95的概率认为误差小于0.00223Process finished with exit code 0

实际上我们可以知道上述三重积分理论值是π20\frac{\pi}{20}20π​。而计算的积分值是0.1590.1590.159。它们的误差值:
∣π20−0.159∣=˙0.00192<0.00223|\frac{\pi}{20}-0.159|\dot{=}0.00192<0.00223 ∣20π​−0.159∣=˙0.00192<0.00223
说明我们的误差预测大概率是正确的。

通俗易懂的Monte Carlo积分方法(四)相关推荐

  1. 通俗易懂的Monte Carlo积分方法(二)

    通俗易懂的Monte Carlo积分方法(二) Monte Carlo积分的计算(期望法) Monte Carlo算法的期望法计算的数学基础: 辛钦大数定律: 如果Xi是独立的随机变量,且EXi是相应 ...

  2. 通俗易懂的Monte Carlo积分方法(一)

    通俗易懂的Monte Carlo积分方法(一) Monte Carlo积分的投点法计算: Monte Carlo算法(投点法)的数学基础: 伯努利大数定律: 设fA为n重伯努利试验中事件A发生的次数, ...

  3. 通俗易懂的Monte Carlo的积分方法(三)

    通俗易懂的Monte Carlo的积分方法(三) 考虑曾经在参加MCM时的一个多重积分的计算难题 ∫∫D(H−z(x,y))21+zx2+zy2dσ\int\int_{D}(H-z(x,y))^2\s ...

  4. Q122:PBRT-V3,提高Monte Carlo积分计算效率的方法——Russian Roulette和Splitting(13.7章节)

    提高Monte Carlo积分计算效率的本质: 减少那些对结果贡献小的采样点的数目! 特别声明:"提高效率"的前提是不能影响计算结果的精确度. 一.Russian Roulette ...

  5. Monte Carlo仿真方法的基本思想及其特点

    Monte Carlo仿真方法又称统计试验法,它是一种采用统计抽样理论近似地求解数学.物理及工程问题的方法.它解决问题的基本思想是,首先建立与描述该问题有相似性的概率模型,然后对模型进行随机模拟或统计 ...

  6. 蒙特卡罗(Monte Carlo)方法计算圆周率π

    一.蒙特卡洛(Monte Carlo)方法简介 蒙特卡洛是一个地名,位于赌城摩纳哥,象征概率.蒙特卡洛(Monte Carlo)方法是由大名鼎鼎的数学家冯·诺伊曼提出的,诞生于上世纪40年代美国的&q ...

  7. MATLAB蒙特卡洛(Monte Carlo)方法求椭圆面积

    MATLAB蒙特卡洛方法求椭圆面积 代码 代码 在某个规定的范围内随机打点,找到满足条件的点,并数一下这些点的数量与总的随机点数量的比,就OK了.关键是设置条件. 代码 clear;clc; n=10 ...

  8. R语言与Markov Chain Monte Carlo(MCMC)方法学习笔记(2)

    前面已经大致的叙述了MCMC方法.今天来分享一下R中的一个实现MCMC算法的包mcmc. mcmc包的一个核心函数就是metrop,其调用格式为: metrop(obj, initial, nbatc ...

  9. Monte carlo 求解积分

    Monte carlo 求解积分 文章目录 Monte carlo 求解积分 @[toc] 1 单变量情形 2 多变量情形 1 单变量情形 假设待求解积分形式为 θ = ∫ 0 1 f ( x ) d ...

最新文章

  1. 如何防止我的模型过拟合?这篇文章给出了6大必备方法
  2. [JVM-翻译]揭开java.lang.OutOfMemoryError面纱之一
  3. python基础语法合集-python常用语法合集
  4. STM32 RTC BKP备份数据区数据丢失问题的讨论
  5. jQ效果:简单的手风琴效果
  6. 前端学习(1898)vue之电商管理系统电商系统之渲染用户的对话框
  7. Adobe illustrator 拼图模板制作 - 连载21
  8. 3-3HDFS中文件的读写操作
  9. Vue中使用节流Lodash throttle
  10. 转:硬盘结构简介的好文(转)---MBR、分区表、CHS等概念
  11. e人e本 html文件上传乱码,打印操作规范引发的乱码故障怎么处理
  12. (转)以太坊的 Merkle 树
  13. Qt -QQ音乐歌词桌面
  14. 稳坐青梅零食第一宝座,溜溜梅凭什么?
  15. 005 ps基础之图像旋转、裁剪
  16. 单元格颜色公式之明细数据项隔行底纹
  17. 深夜里学妹竟然问我会不会C?我直接把这篇文章甩她脸上(C Primer Plus 第六版基础整合)
  18. 【若依】开源框架学习笔记 07 - 登录认证流程(Spring Security 源码)
  19. Javascript学习:删除字符串中的数字
  20. 写给互联网大厂员工的真心话,醍醐灌顶!

热门文章

  1. 深入理解深度学习中的【卷积】和 feature map
  2. tensorflow 实现打印预训练的模型中的变量名和变量值
  3. 3 Django视图层
  4. 夺命雷公狗---ECSHOP---01-解决报错问题
  5. 跨浏览器(IE/FF/OPERA)JS代码小结
  6. Fetion2008 分析 Part1:准备工作
  7. Android中常见布局
  8. Nginx 学习笔记(十)介绍HTTP / 2服务器推送(译)
  9. Oracle 归档模式
  10. 【Spark Summit EU 2016】使用参数服务器在Spark上扩展因式分解机