[图形学]蒙特卡洛积分方法介绍及其方差计算
一、简介
本文介绍了蒙特卡洛积分算法的基本原理和其误差计算。
二、蒙特卡洛积分介绍
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=1∑Np(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=1∑Np(xi)f(xi))=N1i=1∑i=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=1∑i=NE(g(x))=N1∗N∗∫g(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(N1∗i=1∑1=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(c∗X)=c2∗δ2(X)δ2(a∗X+b∗Y)=a2δ2(X)+b2δ2(Y)+2ab∗COV(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(N1∗i=1∑1=N(p(x)f(x)))=N21∗i=1∑i=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)的方差尽可能的小。
四、蒙特卡洛积分与差分积分
蒙特卡洛积分和差分积分都是数值积分方法。
与差分积分方法相比,蒙特卡洛方法的计算复杂度与维度无关。它通过随机采样的方式估计积分值,即使维度增加,样本点的生成和积分估计的计算量并不会指数级增长。这意味着蒙特卡洛方法在高维问题中仍然保持高效,具有稳定的性能。
而在差分积分方法中,每增加一个维度,划分的区域数量会大幅增加,使得差分积分方法的计算复杂度呈指数级增长。
相关文章:
[图形学]蒙特卡洛积分方法介绍及其方差计算
一、简介 本文介绍了蒙特卡洛积分算法的基本原理和其误差计算。 二、蒙特卡洛积分介绍 1. 介绍 蒙特卡洛积分算法是一种数值积分算法,用于对复杂函数进行积分。 例如,对于目标积分函数: ∫ a b f ( x ) d x (1) \int_{a}^{b}f(x)\rm{d}x…...

智慧社区Web解决方案:Spring Boot框架探索
1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及,互联网成为人们查找信息的重要场所,二十一世纪是信息的时代,所以信息的管理显得特别重要。因此,使用计算机来管理基于web的智慧社区设计与实现的相关信息成…...

基于预测算法的航班离港延误系统
毕业设计不知道做什么?想找一个结合算法与应用的项目?那你绝对不能错过这个"基于预测算法的航班离港延误系统"!✈️📊 项目简介: 这个系统专注于航班离港的延误预测,通过强大的神经网络技术对大…...

【汇编语言】寄存器(内存访问)(七)—— CPU提供的栈机制
文章目录 前言1. CPU提供的栈机制2. push指令3. 问题4. 问题的分析与解答5. pop指令结语 前言 📌 汇编语言是很多相关课程(如数据结构、操作系统、微机原理)的重要基础。但仅仅从课程的角度出发就太片面了,其实学习汇编语言可以深…...
webAPI中的节点操作、高级事件
一、节点操作 1.删除节点 node.removeChild(); 方法从node节点中删除一个子节点,返回删除的节点 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widt…...
C++内存对齐机制简介
C内存对齐机制是指数据在内存中按照特定规则进行排列,这个机制可以提高访问效率并且满足硬件访问特性。 C内存对齐机制的一些关键规则如下: 不同类型的数据在内存中的起始地址应该是其大小的倍数。比如,4字节的整型应该存放在地址是4的倍数…...

java集合进阶篇-《List集合》
个人主页→VON 收录专栏→java从入门到起飞 目录 编辑 一、前言 二、List集合简要概述 三、List集合主要函数的应用 四、List集合的遍历 五、思考 一、前言 List集合与Collection集合的相同之处还是挺多的,不过有些小细节又不太一样,其中有一个…...

FPGA图像处理之均值滤波
文章目录 一、什么是图像滤波?1.1 噪声类型1.2 滤波类型 二、均值滤波原理2.1 3*3窗口滑动过程2.2 图像扩展 三、Matlab实现均值滤波四、FPGA实现均值滤波4.1 生成 3*3 矩阵4.2 仿真3*3矩阵4.3 计算均值4.4 仿真均值滤波 一、什么是图像滤波? 图像滤波是…...

高等数学 6.2 定积分在几何学上的应用
文章目录 一、平面图形的面积1.直角坐标情形2.极坐标情形 二、体积1.旋转体体积2.平行截面面积为已知的立体的体积 三、平面曲线的弧长 一、平面图形的面积 1.直角坐标情形 我们已经知道,由曲线 y f ( x ) ( f ( x ) ⩾ 0 ) y f(x) (f(x) \geqslant 0) yf(x)(f…...

缓存常见问题:缓存穿透、雪崩、击穿及解决方案分析
1. 什么是缓存穿透,怎么解决? 缓存穿透是指用户请求的数据在缓存中不存在即没有命中,同时在数据库中也不存在,导致用户每次请求该数据都要去数据库中查询一遍。如果有恶意攻击者不断请求系统中不存在的数据,会导致短时…...
C++:拷贝构造
拷贝构造函数是参数类型为本类的引用的构造函数,它也叫复制构造函数,它只有一个参数。当没有写拷贝构造函数时,会有一个默认的拷贝构造函数。 class AA { public:AA(AA& ra){}} 那么什么时候会调用此函数呢?有以下三种情况 …...

BGP(边界网关协议)
1、网络AS(自治系统) 边界网关协议BGP(Border Gateway Protocol)是一种实现自治系统AS(Autonomous System)之间的路由可达,并选择最佳路由的距离矢量路由协议。 AS是指在一个实体管辖下的拥有…...
Spring 概念汇总
一、Spring中的依赖注入和依赖反转 依赖注入(Dependency Injection) 概念 依赖注入是一种设计模式,它允许在对象创建时将其依赖的对象传递给它,而不是让对象自己去创建或查找依赖对象。在Spring中,依赖注入是控制反转…...

快速在找到函数的实体的方法
当我们写了许多许多的函数,那我们怎么快速的找到他们呢 我们只需要按下ctrl,在点击函数名字就可以快速的找到我们想要的函数...

05 django管理系统 - 部门管理 - 修改部门
04我们已经实现了新增部门的功能,下面开始修改部门模块的实现。 按道理来说,应该是做成弹框样式的,通过ajax悄咪咪的发数据,然后更新前端数据,但是考虑到实际情况,先用页面跳转的方式实现,后面…...

C++初阶——入门
目录 1、C发展历史 2、C版本更新 3、C参考文档 4、C书籍推荐 5、C的程序 6、命名空间 6.1 namespace的作用 6.2 namespace的定义 6.3 namespace的使用 7、C输入&输出 8、缺省参数 9、函数重载 10、引用 10.1 引用的概念和定义 10.2 引用的特性 10.3 引用的使…...

Java基于SSM微信小程序物流仓库管理系统设计与实现(源码+lw+数据库+讲解等)
选题背景 随着社会的发展,社会的方方面面都在利用信息化时代的优势。互联网的优势和普及使得各种系统的开发成为必需。 本文以实际运用为开发背景,运用软件工程原理和开发方法,它主要是采用java语言技术和mysql数据库来完成对系统的设计。整个…...

82.【C语言】数据结构之顺序表的初始化和销毁
目录 1.线性表 2.分类 1.静态顺序表:使用定长数组存储元素 代码示例(写入Seqlist.h中) 2.动态顺序表:使用与动态内存管理有关的函数 代码示例(写入Seqlist.h中) 补:数据管理的四个需求:增改删查 3.操作顺序表 1.初始化顺序表 1.不开辟空间 2.开辟空间 1…...
java-推荐一个控制台输出颜色ANSI字符的类
java-推荐一个控制台输出颜色ANSI字符的类 背景代码调用输出 背景 这个类是来自hive的一段代码,大家可以参考一下,这个类名是ColorBuffer 代码 /** Licensed to the Apache Software Foundation (ASF) under one* or more contributor license agreem…...
关于定义结构体别名时 是否加*
在C语言中,使用typedef来定义结构体类型及其指针的别名时,Node和LinkList的声明方式有所不同,这是因为你对它们的目的和用途有不同的设定。 首先,看一下你的代码: typedef struct { int data; int lenght; // 注意&am…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式
一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...
java_网络服务相关_gateway_nacos_feign区别联系
1. spring-cloud-starter-gateway 作用:作为微服务架构的网关,统一入口,处理所有外部请求。 核心能力: 路由转发(基于路径、服务名等)过滤器(鉴权、限流、日志、Header 处理)支持负…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器
一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...
三维GIS开发cesium智慧地铁教程(5)Cesium相机控制
一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点: 路径验证:确保相对路径.…...

Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具
文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...
Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?
Redis 的发布订阅(Pub/Sub)模式与专业的 MQ(Message Queue)如 Kafka、RabbitMQ 进行比较,核心的权衡点在于:简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...

CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)
漏洞概览 漏洞名称:Apache Flink REST API 任意文件读取漏洞CVE编号:CVE-2020-17519CVSS评分:7.5影响版本:Apache Flink 1.11.0、1.11.1、1.11.2修复版本:≥ 1.11.3 或 ≥ 1.12.0漏洞类型:路径遍历&#x…...
SQL Server 触发器调用存储过程实现发送 HTTP 请求
文章目录 需求分析解决第 1 步:前置条件,启用 OLE 自动化方式 1:使用 SQL 实现启用 OLE 自动化方式 2:Sql Server 2005启动OLE自动化方式 3:Sql Server 2008启动OLE自动化第 2 步:创建存储过程第 3 步:创建触发器扩展 - 如何调试?第 1 步:登录 SQL Server 2008第 2 步…...
深度剖析 DeepSeek 开源模型部署与应用:策略、权衡与未来走向
在人工智能技术呈指数级发展的当下,大模型已然成为推动各行业变革的核心驱动力。DeepSeek 开源模型以其卓越的性能和灵活的开源特性,吸引了众多企业与开发者的目光。如何高效且合理地部署与运用 DeepSeek 模型,成为释放其巨大潜力的关键所在&…...

DeepSeek源码深度解析 × 华为仓颉语言编程精粹——从MoE架构到全场景开发生态
前言 在人工智能技术飞速发展的今天,深度学习与大模型技术已成为推动行业变革的核心驱动力,而高效、灵活的开发工具与编程语言则为技术创新提供了重要支撑。本书以两大前沿技术领域为核心,系统性地呈现了两部深度技术著作的精华:…...