Monte Carlo积分-如何查找错误

问题描述 投票:0回答:1

我需要应用蒙特卡洛积分来估计[0,1]中的以下函数:f(x)= exp(-ax)cos(bx),其中a = 0.3060734和b = 0.11221230。但是,我需要使用四种不同的蒙特卡洛变奏形式:命中或未命中,粗略,重要性抽样和方差控制。所有这些都在本书的第392页:https://edisciplinas.usp.br/pluginfile.php/5168099/mod_resource/content/1/Julio%20Stern.pdf。但是,在估计每个变化量的f(x)的积分后,我需要计算相对误差(| g *-g | / g)<1%,其中g是积分的实数值(未知),而g是*是估计值。如何计算误差?我考虑过使用每个变化的方差,但是我不确定如何做到并使其小于1%。我已经有了计算每个估算值和方差的代码。OBS:我应该使用Python或R。

python r statistics montecarlo
1个回答
0
投票

这里是您的蒙特卡洛模拟积分示例(R)>

a <- 0.3060734
b <- 0.11221230
f <- function(x) exp(-a*x)*cos(b*x)

MCsim <- function(n) {
  gs <- sapply(n,function(k) mean(runif(k) <= f(runif(k))))
  g <- integrate(f,0,1)$value
  rel_err <- abs(gs-g)/g
  data.frame(n,gs,g,rel_err)
}

n <- 10**(1:7)
res <- MCsim(n)

诸如此类

> res
      n        gs         g      rel_err
1 1e+01 0.8000000 0.8597815 6.953106e-02
2 1e+02 0.8700000 0.8597815 1.188497e-02
3 1e+03 0.8590000 0.8597815 9.089768e-04
4 1e+04 0.8570000 0.8597815 3.235149e-03
5 1e+05 0.8606900 0.8597815 1.056639e-03
6 1e+06 0.8596650 0.8597815 1.355245e-04
7 1e+07 0.8597802 0.8597815 1.536980e-06
© www.soinside.com 2019 - 2024. All rights reserved.