蒙特卡洛算法是常用的仿真算法,现借助R语言实现一些蒙特卡洛算法的应用。
一、蒙特卡洛方法测算π
1.1 原理:随机向单位正方形和圆结构抛洒大量点,对于每个点,可能在圆内或者在圆外,当随机抛洒点数量达到一定程度,圆内点将构成圆的面积,全部抛点将构成矩形面积。圆内点数除以所有点数就是面积之比,即π/4。随机点数量越大,得到的π值越精确。
1.2 程序:
zeros <- 0
k <- 0
darts <- 10^4 #决定精度
start <-proc.time()
x1 <- vector(mode = "numeric",length = 0)
y1 <- vector(mode = "numeric",length = 0)
x2 <- vector(mode = "numeric",length = 0)
y2 <- vector(mode = "numeric",length = 0)
for (i in 1:darts){
x <- runif(1);y <- runif(1)
if(sqrt(x^2+y^2) > 1) {k <- k+1;x2[k] <- x;y2[k] <- y}
else{zeros <- zeros + 1;x1[zeros] <- x;y1[zeros] <- y}
}
pi <- 4*zeros/darts
proc.time()-start
print(paste0('pi is ',pi))