当前位置: 首页 > article >正文

[图形学]蒙特卡洛积分方法介绍及其方差计算

一、简介

本文介绍了蒙特卡洛积分算法的基本原理和其误差计算。

二、蒙特卡洛积分介绍

1. 介绍

蒙特卡洛积分算法是一种数值积分算法,用于对复杂函数进行积分。
例如,对于目标积分函数:
∫ a b f ( x ) d x (1) \int_{a}^{b}f(x)\rm{d}x \tag{1} abf(x)dx(1)
其中 f ( x ) f(x) f(x)很复杂,无法找到解析解。我们可以在 f ( x ) f(x) f(x)的定义域 [ a , b ] [a,b] [a,b]上按照任意的概率密度函数 p ( x ) p(x) p(x)进行采样。并统计采样的随机变量的样本期望:
F N = 1 N ∑ i = 1 N f ( x i ) p ( x i ) (2) F_N = \frac{1}{N}\sum_{i=1}^{N}\frac{f(x_{i})}{p(x_{i})} \tag{2} FN=N1i=1Np(xi)f(xi)(2)
可以保证:
E ( F N ) = ∫ a b f ( x ) d x (3) E(F_N)=\int_{a}^{b}f(x)\rm{d}x \tag{3} E(FN)=abf(x)dx(3)

2. 证明

下面证明公式(3)的正确性:
E ( F N ) = E ( 1 N ∑ i = 1 N f ( x i ) p ( x i ) ) = 1 N ∑ i = 1 i = N E ( f ( x i ) p ( x i ) ) E(F_N) = E(\frac{1}{N}\sum_{i=1}^{N}\frac{f(x_{i})}{p(x_{i})}) \\ =\frac{1}{N}\sum_{i=1}^{i=N}E(\frac{f(x_i)}{p(x_{i})}) E(FN)=E(N1i=1Np(xi)f(xi))=N1i=1i=NE(p(xi)f(xi))
我们令 g ( x ) = f ( x ) p ( x ) g(x)=\frac{f(x)}{p(x)} g(x)=p(x)f(x),那么
E ( F N ) = 1 N ∑ i = 1 i = N E ( g ( x ) ) = 1 N ∗ N ∗ ∫ g ( x ) ∗ p ( x ) d x = ∫ g ( x ) ∗ p ( x ) d x = ∫ f ( x ) d x (4) E(F_N)=\frac{1}{N}\sum_{i=1}^{i=N}E(g(x)) \\ =\frac{1}{N}*N* \int_{}^{}g(x)*p(x){\rm{d}x} \\ = \int{g(x)*p(x)}{\rm{d}}x \\ =\int{f(x)}{\rm{d}x} \tag{4} E(FN)=N1i=1i=NE(g(x))=N1Ng(x)p(x)dx=g(x)p(x)dx=f(x)dx(4)
求证得证。

三、蒙特卡洛积分方差

蒙特卡洛积分算法的收敛程度可以适用其方差(标准差)表示。若其方差收敛速度很快,说明该算法可以适用较少的采样值,得到较高的积分精度,反则反之。下面对蒙特卡积分算法的方差和标准差进行计算。
下面计算蒙特卡洛积分算法的方差:
δ 2 ( F N ) = δ 2 ( 1 N ∗ ∑ i = 1 1 = N ( f ( x ) p ( x ) ) ) (5) \delta^{2}(F_N) = \delta^{2}(\frac{1}{N}*\sum_{i=1}^{1=N}(\frac{f(x)}{p(x)})) \tag{5} δ2(FN)=δ2(N1i=11=N(p(x)f(x)))(5)
根据方差的性质:
δ 2 ( c ∗ X ) = c 2 ∗ δ 2 ( X ) δ 2 ( a ∗ X + b ∗ Y ) = a 2 δ 2 ( X ) + b 2 δ 2 ( Y ) + 2 a b ∗ C O V ( X , Y ) (6) \delta^{2}(c*X) = c^{2}*\delta^{2}(X) \\ \delta^{2}(a*X+b*Y)=a^2\delta^{2}(X)+b^2\delta^{2}(Y)+2ab*COV(X,Y) \tag{6} δ2(cX)=c2δ2(X)δ2(aX+bY)=a2δ2(X)+b2δ2(Y)+2abCOV(X,Y)(6)
又因为采样的随机变量 x i x_i xi相互独立,因此:
δ 2 ( F N ) = δ 2 ( 1 N ∗ ∑ i = 1 1 = N ( f ( x ) p ( x ) ) ) = 1 N 2 ∗ ∑ i = 1 i = N δ 2 ( f ( x ) p ( x ) ) = 1 N ∗ δ 2 ( f ( x ) p ( x ) ) (7) \delta^{2}(F_N) = \delta^{2}(\frac{1}{N}*\sum_{i=1}^{1=N}(\frac{f(x)}{p(x)})) \\ =\frac{1}{N^2}*\sum_{i=1}^{i=N}\delta^{2}(\frac{f(x)}{p(x)}) \\ =\frac{1}{N}*\delta^{2}(\frac{f(x)}{p(x)}) \tag{7} δ2(FN)=δ2(N1i=11=N(p(x)f(x)))=N21i=1i=Nδ2(p(x)f(x))=N1δ2(p(x)f(x))(7)
工具公式(7)可知,蒙特卡罗积分方法的方差与采样数 N N N成反比,与 δ 2 ( f ( x ) p ( x ) ) \delta^{2}(\frac{f(x)}{p(x)}) δ2(p(x)f(x))成正比。
为了得到更为准确的结果,一方面我们可以增加采样数,即增大 N N N
另一方面我们可以尽可能地令 δ 2 ( f ( x ) p ( x ) ) \delta^{2}(\frac{f(x)}{p(x)}) δ2(p(x)f(x))小一些,由于 f ( x ) f(x) f(x)是我们待求的积分函数,无法进行修改,因此我们可以寻找一个概率密度函数 p ( x ) p(x) p(x),使得 f ( x ) p ( x ) \frac{f(x)}{p(x)} p(x)f(x)的方差尽可能的小。

四、蒙特卡洛积分与差分积分

蒙特卡洛积分和差分积分都是数值积分方法。
与差分积分方法相比,蒙特卡洛方法的计算复杂度与维度无关。它通过随机采样的方式估计积分值,即使维度增加,样本点的生成和积分估计的计算量并不会指数级增长。这意味着蒙特卡洛方法在高维问题中仍然保持高效,具有稳定的性能。
而在差分积分方法中,每增加一个维度,划分的区域数量会大幅增加,使得差分积分方法的计算复杂度呈指数级增长。


http://www.kler.cn/news/355454.html

相关文章:

  • AcWing 3817:数组 ← 贪心算法
  • JavaWeb 23.NPM配置和使用
  • HTML5教程(四) - 结构标签
  • git+cmake将Open3D配置到visual studio
  • Android中 tools:text 和 android:text区别
  • Java JDK的面试题
  • Redis基础篇(含redis在linux环境下的安装教程,以及用docker安装redis的教程)
  • 【Linux驱动开发】嵌入式Linux驱动开发基本步骤,字符设备开发入门,点亮LED
  • Python知识梳理总结思维导图
  • SpringBoot实现的物流优化策略
  • 笔记整理—linux网络部分(2)Linux网络框架
  • 如何成为 Rust 核心贡献者?Rust 开发的核​​心是什么?Rust 重要技术专家揭秘
  • Redis登录校验
  • 在电脑上免费分区的 5 个有效磁盘分区软件工具
  • flume 负载均衡 详解
  • 2024年电子信息与信号处理国际学术研讨会(EISP 2024,2024年11月15-17日)
  • JavaWeb合集15-Apache POI
  • 需要补充的技能
  • WPF常见容器全方位介绍
  • TS项目中如何合理的为接口定义参数类型