的黎曼近似,其中有足够的矩形来近似积分。然后进行蒙特卡罗积分,其中积分区间中均匀选择的点被替换为矩形底的中心。∫10x2dx=1/3
# Riemann approx with m rectangles
m = 1000; a = 0; b = 1
w = (b-a)/m # rectangle widths
d = seq(a+w/2,b-w/2, len=m) # centers
h = d^2 # rectangle heights
sum(w*h) # rectamg;e areas
[1] 0.3333332
# MC emulates Riemann
# with random uniform grid
m = 10^6; a=0; b=1
w = (b-a)/m # "average width"
d = runif(m, a, b)
h = d^2
sum(w*h)
[1] 0.3332943
附录 1: @Dave 评论中的每个问题:的密度函数的 MC 近似值,以验证它是否集成为一。Beta(2,2)
# Approx integration: BETA(2,2) density
m = 10^6; a=0; b=1
w = (b-a)/m
d = runif(m, a, b)
h = dbeta(d, 2, 2) # BETA(2,2) PDF
sum(w*h)
[1] 1.000299 # aprx 1
附录2:关于将MC扩展到多个维度。
假设我们要验证标准二元正态分布下单位平方中我们将点均匀地随机放置在单位平方中,并将它们对应的密度相加:0.34132=0.1165
set.seed(1234)
m = 10^4; u1=runif(m); u2 = runif(m)
h = dnorm(u1)*dnorm(u2)
mean(h) # mc aprx
[1] 0.1163528
diff(pnorm(c(0,1)))^2 # exact
[1] 0.1165162
此外,我们发现的三角形内标准二元正态分布我们在三角形中均匀随机放置点,将对应的密度值相加,乘以三角形面积的。[精确值可以通过对称获得,使用 45 度旋转。]0.0677(0,0),(0,1),(1.0).1/2
h.acc = h[u1+u2<=1]
.5*mean(h.acc) # mc aprx
[1] 0.06768097
diff(pnorm(c(sqrt(1/2),0)))^2 # exact
[1] 0.06773003
或许请参阅
此问答以了解其他 MC 集成方法。