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

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

一、简介

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

二、蒙特卡洛积分介绍

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)的方差尽可能的小。

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

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

相关文章:

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

一、简介 本文介绍了蒙特卡洛积分算法的基本原理和其误差计算。 二、蒙特卡洛积分介绍 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节点中删除一个子节点&#xff0c;返回删除的节点 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widt…...

C++内存对齐机制简介

C内存对齐机制是指数据在内存中按照特定规则进行排列&#xff0c;这个机制可以提高访问效率并且满足硬件访问特性。 C内存对齐机制的一些关键规则如下&#xff1a; 不同类型的数据在内存中的起始地址应该是其大小的倍数。比如&#xff0c;4字节的整型应该存放在地址是4的倍数…...

java集合进阶篇-《List集合》

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

FPGA图像处理之均值滤波

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

高等数学 6.2 定积分在几何学上的应用

文章目录 一、平面图形的面积1.直角坐标情形2.极坐标情形 二、体积1.旋转体体积2.平行截面面积为已知的立体的体积 三、平面曲线的弧长 一、平面图形的面积 1.直角坐标情形 我们已经知道&#xff0c;由曲线 y f ( x ) ( f ( x ) ⩾ 0 ) y f(x) (f(x) \geqslant 0) yf(x)(f…...

缓存常见问题:缓存穿透、雪崩、击穿及解决方案分析

1. 什么是缓存穿透&#xff0c;怎么解决&#xff1f; 缓存穿透是指用户请求的数据在缓存中不存在即没有命中&#xff0c;同时在数据库中也不存在&#xff0c;导致用户每次请求该数据都要去数据库中查询一遍。如果有恶意攻击者不断请求系统中不存在的数据&#xff0c;会导致短时…...

C++:拷贝构造

拷贝构造函数是参数类型为本类的引用的构造函数&#xff0c;它也叫复制构造函数&#xff0c;它只有一个参数。当没有写拷贝构造函数时&#xff0c;会有一个默认的拷贝构造函数。 class AA { public:AA(AA& ra){}} 那么什么时候会调用此函数呢&#xff1f;有以下三种情况 …...

BGP(边界网关协议)

1、网络AS&#xff08;自治系统&#xff09; 边界网关协议BGP&#xff08;Border Gateway Protocol&#xff09;是一种实现自治系统AS&#xff08;Autonomous System&#xff09;之间的路由可达&#xff0c;并选择最佳路由的距离矢量路由协议。 AS是指在一个实体管辖下的拥有…...

Spring 概念汇总

一、Spring中的依赖注入和依赖反转 依赖注入&#xff08;Dependency Injection&#xff09; 概念 依赖注入是一种设计模式&#xff0c;它允许在对象创建时将其依赖的对象传递给它&#xff0c;而不是让对象自己去创建或查找依赖对象。在Spring中&#xff0c;依赖注入是控制反转…...

快速在找到函数的实体的方法

当我们写了许多许多的函数&#xff0c;那我们怎么快速的找到他们呢 我们只需要按下ctrl&#xff0c;在点击函数名字就可以快速的找到我们想要的函数...

05 django管理系统 - 部门管理 - 修改部门

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

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+数据库+讲解等)

选题背景 随着社会的发展&#xff0c;社会的方方面面都在利用信息化时代的优势。互联网的优势和普及使得各种系统的开发成为必需。 本文以实际运用为开发背景&#xff0c;运用软件工程原理和开发方法&#xff0c;它主要是采用java语言技术和mysql数据库来完成对系统的设计。整个…...

82.【C语言】数据结构之顺序表的初始化和销毁

目录 1.线性表 2.分类 1.静态顺序表&#xff1a;使用定长数组存储元素 代码示例(写入Seqlist.h中) 2.动态顺序表:使用与动态内存管理有关的函数 代码示例(写入Seqlist.h中) 补:数据管理的四个需求:增改删查 3.操作顺序表 1.初始化顺序表 1.不开辟空间 2.开辟空间 1…...

java-推荐一个控制台输出颜色ANSI字符的类

java-推荐一个控制台输出颜色ANSI字符的类 背景代码调用输出 背景 这个类是来自hive的一段代码&#xff0c;大家可以参考一下&#xff0c;这个类名是ColorBuffer 代码 /** Licensed to the Apache Software Foundation (ASF) under one* or more contributor license agreem…...

关于定义结构体别名时 是否加*

在C语言中&#xff0c;使用typedef来定义结构体类型及其指针的别名时&#xff0c;Node和LinkList的声明方式有所不同&#xff0c;这是因为你对它们的目的和用途有不同的设定。 首先&#xff0c;看一下你的代码&#xff1a; typedef struct { int data; int lenght; // 注意&am…...

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…...

生成xcframework

打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式&#xff0c;可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...

可靠性+灵活性:电力载波技术在楼宇自控中的核心价值

可靠性灵活性&#xff1a;电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中&#xff0c;电力载波技术&#xff08;PLC&#xff09;凭借其独特的优势&#xff0c;正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据&#xff0c;无需额外布…...

uniapp微信小程序视频实时流+pc端预览方案

方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度​WebSocket图片帧​定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐​RTMP推流​TRTC/即构SDK推流❌ 付费方案 &#xff08;部分有免费额度&#x…...

第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词

Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵&#xff0c;其中每行&#xff0c;每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid&#xff0c;其中有多少个 3 3 的 “幻方” 子矩阵&am…...

代码随想录刷题day30

1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币&#xff0c;另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额&#xff0c;返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...

[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】&#xff0c;分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...

【Post-process】【VBA】ETABS VBA FrameObj.GetNameList and write to EXCEL

ETABS API实战:导出框架元素数据到Excel 在结构工程师的日常工作中,经常需要从ETABS模型中提取框架元素信息进行后续分析。手动复制粘贴不仅耗时,还容易出错。今天我们来用简单的VBA代码实现自动化导出。 🎯 我们要实现什么? 一键点击,就能将ETABS中所有框架元素的基…...

软件工程 期末复习

瀑布模型&#xff1a;计划 螺旋模型&#xff1a;风险低 原型模型: 用户反馈 喷泉模型:代码复用 高内聚 低耦合&#xff1a;模块内部功能紧密 模块之间依赖程度小 高内聚&#xff1a;指的是一个模块内部的功能应该紧密相关。换句话说&#xff0c;一个模块应当只实现单一的功能…...

macOS 终端智能代理检测

&#x1f9e0; 终端智能代理检测&#xff1a;自动判断是否需要设置代理访问 GitHub 在开发中&#xff0c;使用 GitHub 是非常常见的需求。但有时候我们会发现某些命令失败、插件无法更新&#xff0c;例如&#xff1a; fatal: unable to access https://github.com/ohmyzsh/oh…...