随机投点法计算定积分java_11 随机模拟积分 | 统计计算

11.4 高维定积分

上面的两种计算一元函数定积分的方法可以很容易地推广到多元函数定积分,

或称高维定积分。

设\(d\)元函数\(h(x_1, x_2, \dots, x_d)\)定义于超矩形

\[\begin{aligned}

C = \{(x_1, x_2, \ldots, x_d): a_i \leq x_i \leq b_i, i=1,2,\ldots,d \}

\end{aligned}\]

\[\begin{aligned}

0 \leq h(x_1, \ldots, x_d) \leq M,

\ \forall x \in C.

\end{aligned}\]

\[\begin{aligned}

D =& \{(x_1, x_2, \ldots, x_d, y): (x_1, x_2, \ldots, x_d) \in C,

\ 0 \leq y \leq h(x_1, x_2, \ldots, x_d) \}, \\

G =& \{(x_1, x_2, \ldots, x_d, y): (x_1, x_2, \ldots, x_d) \in C,

\ 0 \leq y \leq M \}

\end{aligned}\]

为计算\(d\)维定积分

\[\begin{align}

I = \int_{a_d}^{b_d} \cdots \int_{a_2}^{b_2} \int_{a_1}^{b_1}

h(x_1, x_2, \ldots,x_d) \, dx_1 d x_2 \cdots dx_d,

\tag{11.18}

\end{align}\]

产生服从\(d+1\)维空间中的超矩形\(G\)内的均匀分布的独立抽样

\(\boldsymbol Z_1, \boldsymbol Z_2, \ldots, \boldsymbol Z_N\), 令

\[\begin{aligned}

\xi_i = \begin{cases}

1, & \boldsymbol Z_i \in D \\

0, & \boldsymbol Z_i \in G-D

\end{cases}, \quad i=1,2,\ldots,N

\end{aligned}\]

则\(\xi_i\) iid

b(1,\(p\)),

\[\begin{aligned}

p = P(\boldsymbol Z_i \in D) = \frac{V(D)}{V(G)}

= \frac{I}{M V(C)}

= \frac{I}{M \prod_{j=1}^d (b_j-a_j)}

\end{aligned}\]

其中\(V(\cdot)\)表示区域体积。

令\(\hat p\)为\(N\)个随机点中落入\(D\)的百分比,则

\[\begin{aligned}

\hat p =& \frac{\sum \xi_i}{N} \to p,

\ \text{a.s.} (N \to \infty),

\end{aligned}\]

\[\begin{align}

\hat I_1 = \hat p V(G) = \hat p \cdot M \, V(C)

= \hat p \cdot M \prod_{j=1}^d (b_j-a_j)

\tag{11.19}

\end{align}\]

估计积分\(I\),

则\(\hat I_1\)是\(I\)的无偏估计和强相合估计。

称用式(11.19)计算高维定积分\(I\)的方法为随机投点法。

由中心极限定理知

\[\begin{aligned}

\sqrt{N}(\hat p - p)/\sqrt{p(1-p)} \stackrel{d}{\longrightarrow}&

\text{N}(0,1), \\

\sqrt{N}(\hat I_1 - I) \stackrel{d}{\longrightarrow}&

\text{N}\left(0, \left(M \prod_{j=1}^n (b_j - a_j) \right)^2 p(1-p)\right),

\end{aligned}

\]

\(\hat I_1\)的渐近方差为

\[\begin{align}

\frac{\left(M \prod_{j=1}^n (b_j - a_j)\right)^2 p(1-p)}{N}

\tag{11.20}

\end{align}\]

所以\(\hat I_1\)的随机误差仍为\(O_p\left(\frac{1}{\sqrt{N}}\right)\),

\(N\to\infty\)时的误差阶不受维数\(d\)的影响,

这是随机模拟方法与其它数值计算方法相比一个重大优势。

在计算高维积分(11.18)时,

仍可以通过估计\(E h(\boldsymbol U)\)来获得,

其中\(\boldsymbol U\)服从\(R^d\)中的超矩形\(C\)上的均匀分布。 设\(\boldsymbol U_i \sim\) iid

U(\(C\)),\(i=1,2,\ldots,N\), 则\(h(\boldsymbol U_i), i=1,2,\ldots,N\)是iid随机变量列,

\[\begin{aligned}

E h(\boldsymbol U_i) = \int_C h(\boldsymbol u) \frac{1}{\prod_{j=1}^d (b_j - a_j)} d \boldsymbol u

= \frac{I}{\prod_{j=1}^d (b_j - a_j)},

\end{aligned}\]

估计\(I\)为

\[\begin{align}

\hat I_2 = \prod_{j=1}^d (b_j - a_j)

\cdot \frac{1}{N} \sum_{i=1}^N h(U_i),

\tag{11.21}

\end{align}\]

称用式(11.21)计算高维定积分\(I\)的方法为平均值法。

由强大数律

\[\begin{aligned}

\hat I_2 \to \prod_{j=1}^d (b_j - a_j) E h(U) = I,

\ \text{a.s.} (N \to \infty),

\end{aligned}\]

\(\hat I_2\)的渐近方差为

\[\begin{align}

\frac{(V(C) )^2 \text{Var}(h(\boldsymbol U))}{N}

= \frac{\left(\prod_{j=1}^d (b_j - a_j) \right)^2 \text{Var}(h(\boldsymbol U))}{N}.

\tag{11.22}

\end{align}\]

\(N \to \infty\)时的误差阶也不受维数\(d\)的影响。

我们来比较随机投点法(11.19)与平均值法(11.21)的精度,

只要比较其渐近方差。

对\(I = \int_C h(\boldsymbol x) d \boldsymbol x\),

设\(\hat I_1\)为随机投点法的估计,

\(\hat I_2\)为平均值法的估计。

因设\(0 \leq h(\boldsymbol x) \leq M\),

不妨设\(0 \leq h(\boldsymbol x) \leq 1\), 取\(h(\boldsymbol x)\)的上界\(M=1\)。

令\(\boldsymbol X_i \sim\) iid U(\(C\)),

\(\eta_i = h(\boldsymbol X_i)\), \(Y_i \sim\) iid

U(0,1)与\(\{\boldsymbol X_i\}\)独立,

\[\begin{aligned}

\xi_i = \begin{cases}

1, & \text{as} Y_i \leq h(\boldsymbol X_i) \\

0, & \text{as} Y_i > h(\boldsymbol X_i)

\end{cases}

\ i=1,2,\ldots,N,

\end{aligned}\]

这时有

\[\begin{aligned}

\hat I_1 &= V(C) \frac{1}{N} \sum_{i=1}^N \xi_i, \qquad

\hat I_2 = V(C) \frac{1}{N} \sum_{i=1}^N \eta_i \\

\text{Var}(\hat I_1) &= \frac{1}{N} V^2(C) \cdot \frac{I}{V(C)}

\left(1 - \frac{I}{V(C)} \right) \\

\text{Var}(\hat I_2) &= \frac{1}{N} V^2(C) \cdot \left(

\frac{1}{V(C)} \int_C h^2(\boldsymbol x)d \boldsymbol x

- \left( \frac{I}{V(C)} \right)^2 \right) \\

\text{Var}(\hat I_1) - \text{Var}(\hat I_2) &=

\frac{V(C)}{N} \int_C \left\{ h(\boldsymbol x) - h^2(\boldsymbol x) \right \} \,d\boldsymbol x \geq 0

\end{aligned}\]

可见平均值法精度更高。

事实上,随机投点法多用了随机数\(Y_i\),必然会增加抽样随机误差。

在计算高维积分(11.18)时, 如果用网格法作数值积分,

把超矩形\(C = [a_1, b_1] \times [a_2, b_2] \times \cdots \times [a_d, b_d]\)

的每个边分成\(n\)个格子,就需要\(N=n^d\)个格子点,

如果用每个小超矩形的中心作为代表点, 可以达到\(O(n^{-2})\)精度,

即\(O(N^{-2/d})\), 当维数增加时为了提高一倍精度需要\(2^{d/2}\)倍的代表点。

比如\(d=8\),精度只有\(O(N^{-1/4})\)。

高维的问题当维数增加时计算量会迅猛增加, 以至于无法计算,

这个问题称为维数诅咒。

如果用Monte Carlo积分,则精度为\(O_p(N^{-1/2})\), 与\(d\)关系不大。

所以Monte Carlo方法在高维积分中有重要应用。

为了提高积分计算精度,需要减小\(O_\text{p}(N^{-1/2})\)中的常数项,

即减小\(\hat I\)的渐近方差。

例11.3考虑

\[\begin{aligned}

& f(x_1, x_2, \ldots, x_d) = x_1^2 x_2^2 \cdots x_d^2,

\ 0 \leq x_1 \leq 1, 0 \leq x_2 \leq 1, \dots, 0 \leq x_d \leq 1

\end{aligned}\]

的积分

\[\begin{aligned}

I = \int_0^1 \cdots \int_0^1 \int_0^1

x_1^2 x_2^2 \cdots x_d^2

\, dx_1 dx_2 \cdots dx_d

\end{aligned}\]

当然,这个积分是有精确解\(I = (1/3)^d\)的,

对估计\(I\)的结果我们可以直接计算误差。

以\(d=8\)为例比较网格点法、随机投点法、平均值法的精度,

这时真值\(I = (1/3)^8 \approx 1.5241587 \times 10^{-4}\)。

用\(n\)网格点法,\(N=n^d\),公式为

\[\begin{aligned}

I_0 = \frac{1}{N} \sum_{i_1=1}^n \sum_{i_2=1}^n \cdots \sum_{i_d=1}^n

f(\frac{2i_1-1}{2n}, \frac{2i_2-1}{2n}, \ldots, \frac{2i_d-1}{2n})

\end{aligned}\]

误差绝对值为\(e_0 = | I_0 - I |\)。

如果取\(n=5, d=8\),需要计算\(N=390625\)个点的函数值,

计算量相当大。

计算程序:

积分真值:

网格法:

网格法误差和相对误差:

相对误差约8%,误差较大。

用随机投点法求\(I\),

先在\((0,1)^d \times (0,1)\)均匀抽样

\((\xi_i^{(1)}, \xi_i^{(2)}, \ldots, \xi_i^{(d)}, y_i), i=1,\ldots, N\),

令\(\hat I_1\)为\(y_i \leq f(\xi_i^{(1)}, \xi_i^{(2)}, \ldots, \xi_i^{(d)})\)成立的百分比。

一次估计的程序和结果为

估计RMSE、MAE和MRE来度量误差大小:

估计的相对误差约为10个百分点,

误差较大。

为了确认这样的误差估计,

将随机投点法重复模拟\(B=100\)次,得到100个\(I\)的估计,程序为:

用\(B=100\)次重复模拟估计平均相对误差:

这确认了从一次模拟给出的平均相对误差估计,两者基本相同。

用平均值方法,公式为

\[\begin{aligned}

\hat I_2 = \frac{1}{N} \sum_{i=1}^N f(\xi^{(1)}_i, \xi^{(2)}_i, \cdots, \xi^{(d)}_i)

\end{aligned}\]

其中\(\xi^{(j)}_i, i=1, \ldots, N, j=1,\ldots,d\) 独立同U(0,1)分布。

一次计算的程序为:

平均值法的各种误差度量为:

相对误差约为1.3个百分点。

类似地, 重复\(B=100\)次,估计MRE:

用\(B=100\)次重复模拟估计平均相对误差:

相对误差约为1.4个百分点,

与从一次模拟估算的平均相对误差相同。

注意实际编程时,

随机投点法和平均值法可以使用同一组随机数,

可以大大减少运算量。

随机模拟程序是消耗计算资源特别严重的计算任务之一,

设计更高效的算法、程序进行优化、考虑并行计算,

都是随机模拟问题的实现需要考虑的。

对随机模拟问题,

高效的算法主要指估计的方差更小,

这样误差小,

达到一定精度需要的计算量就小。

最后,三种方法计算量相同(都计算\(N=5^8\)次函数值)的情况下,

平均相对误差分别为:

随机投点法的误差与网格法相近;

平均值法的误差只有随机投点法的13%。

※※※※※

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/529845.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java el ognl_EL和OGNL表达式的区分

OGNL是通常要结合Struts 2的标志一起使用,如 struts页面中不能单独使用,el可以单独使用 ${sessionScope.username}页面取值区别:名称servletognl elparametersre…

java query包,有没有Java的http_build_query函数的Java等价物?

I have a Map with my data and want to build a query string with it, just like I would with http_build_query on PHP. Im not sure if this code is the best implementation of it or if Im forgetting something?public String toQueryString(Map, ?> data) throw…

JAVA不同类型数组重载_java学习笔记--java中的方法与数组

方法完成特定功能的代码块方法的格式修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2...){//方法体return 返回值;}方法的调用方式通过方法名调用方法根据形式参数列表将实际参数传递给方法定义方法的注意事项1.方法必须定义在类中2.方法与…

链表每k个反转 java_K 个一组翻转链表

leetcode第25题(困难)问题描述给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。示例:给…

java里面的scanner怎么关闭_作业。scanner怎么不能关闭

package try_catch; import java.util.Scanner; public class TryCatchPractice2 {//在类开始声明,则其他方法都能调用 Scanner in=new Scanner(System.in); NoBookException NoB=new NoBookException(); String[] books={"语文","数学","英语"…

java ddd 领域事件_Cribbb基于DDD/Domain Event领域事件的开源PHP通知系统

Cribbb是一个使用DDD聚合根和领域事件Domain Events概念开发的PHP开源通知框架:cribbb/cribbb GitHub几乎所有Web应用都有一个通知提醒系统,这些通知系统都有共有的属性和功能:一个发往用户的消息管道Cribbb通知系统扮演一种消息管道&#x…

java 自带导出excel_4.java项目页面导出excel功能

用的是SSM框架,字段根据自己的业务需求改1.前台页面导出/*导出按钮提交*/function downloadExcel(){$("#dynamicDownload").submit();}2.后台相关代码import org.apache.poi.hssf.usermodel.HSSFCellStyle;import org.apache.poi.hssf.usermodel.HSSFFont;import org…

php 运行外部程序_PHP在linux上执行外部命令的方法

目录:一、PHP中调用外部命令介绍二、关于安全问题三、关于超时问题四、关于PHP运行linux环境中命令出现的问题一、PHP中调用外部命令介绍在PHP中调用外部命令,可以用,1>调用专门函数、2>反引号、3>popen()函数打开进程,三…

php直播pk规则,直播源码中的主播PK功能是如何实现的

直播行业为赢得更广泛用户的青睐,自然要不断开发更有趣的玩法、模式,在直播源码中加入主播PK功能就是一种提高直播互动性、激发用户好胜心的方法,一方面这种方法可以吸引更多用户观看,增加主播的曝光率,另一方面它又能…

php中手机端ajax上拉加载更多,jQuery手机网页上拉加载更多

手机网页和PC网页都可以使用的上拉加载更多内容,其中LoadingDataFn自己改为ajax加载就可以了var page 1, //分页码off_on false, //分页开关(滚动加载方法 1 中用的)timers null; //定时器(滚动加载方法 2 中用的)//加载数据var LoadingDataFn function() {var …

phpcms上传php,phpcms如何上传视频

phpcms如何上传视频?phpcms-v9上传视频文件时的解决方案1.不建议直接在后台上传视频文件,因为视频文件一般都比较大,直接上传影响带宽;可先通过ftp工具将视频文件上传到指定目录,然后再后台引入视频文件的地址即可2.如…

护卫神怎么重启php,护卫神·主机大师如何开启php_opcache_护卫神

护卫神主机大师支持5.5至7.3这几个版本开启php_opcache扩展。一,先打开护卫神主机大师面板-常用操作-打开软件目录二,打开phpweb目录,找到要开启opcache的php版本,比如我这里要在php5.5中开启,进入php55目录&#xff0…

php 首页加背景图片,如何在页首添加一张背景图片

Navy主题如何在页首添加一张图片可以http://www.ikk.me/这样子顶部添加背景图片他的代码是【点击查看】回复内容:Navy主题如何在页首添加一张图片可以http://www.ikk.me/这样子顶部添加背景图片他的代码是【点击查看】看了下代码,就是给 section 加了个 …

php装箱,php兑现装箱算法

php实现装箱算法贪婪法是一种不追求最优解,只希望得到较为满意解的方法。贪婪法一般可以快速得到满意的解,因为它省去了为找最优解要穷尽所有可能而必须耗费的大量时间。贪婪法常以当前情况为基础作最优选择,而不考虑各种可能的整体情况&…

flash as3与后台php交互用户注册例子,as3与PHP后台交互2

怎么样,是不是也很方便的实现了as3和后台的数据传输?恩,现在我们的程序可以双向交互数据了,但这只是一些简单的数据,如果你要传输带有结构的数据,(熟悉as2的人都知道loadVars可以自动解析下载数据的结构)&a…

java 去除 quot,JAVA去除web页面传入后台的特殊字符工具类 | 学步园

package www.tmzskj.com.utils;import java.util.regex.Matcher;import java.util.regex.Pattern;import org.junit.Test;/*** 功能 过滤特殊字符,清除掉所有特殊字符* regEx 为要清除的字符* author admin**/public class StringFilterTest {public static String …

matlab傅里叶工具箱,matlab通信工具箱.pdf

matlab通信工具箱randerr 产生随机误码图样randint 产生均匀分布的随机整数信号源 randsrc 用预定义的字母表产生随机矩阵wgn 产生高斯噪声commsrc.pattern 结构模式生成句柄berawgn 非编码的AWGN 信道的误比特率bercoding 编码的AWGN 信道的误比特率berconfint 蒙特卡罗仿真下…

java迭代器cas,java提高篇(三十)-Iterator - Java 技术驿站-Java 技术驿站

迭代对于我们搞Java的来说绝对不陌生。我们常常使用JDK提供的迭代接口进行Java集合的迭代。Iterator iterator list.iterator();while(iterator.hasNext()){String string iterator.next();//do something}迭代其实我们可以简单地理解为遍历,是一个标准化遍历各类…

mysqldb mysql config,安装mysqldb python界面时找不到mysql_config

mySQLdb是一个用于mysql的python界面,但它不是mysql本身。 显然mySQLdb需要命令“mysql_config”,所以你需要先安装。你能否确认你是否通过从shell运行“mysql”来安装mysql本身? 这应该给你一个“mysql:command not found”以外的…

kfcm算法matlab实现,KFCM算法分析

function [center, U, obj_fcn] KFCMClust(data, cluster_n, kernel_b,options)% FCMClust.m 采用模糊C均值对数据集data聚为cluster_n类%% 用法:% 1. [center,U,obj_fcn] KFCMClust(Data,N_cluster,kernel_b,options);% 2. [center,U,obj_fcn] KFCMClus…