R中的蒙特卡罗方法

时间:2018-11-12 20:53:21

标签: r montecarlo

我正在尝试学习R。我正在尝试编写一个计算(大约)pi的程序。 Read About the method

我的代码目前无法正常工作!

f <- 0
s <- 0
range <- 10000
for (i in (1:range)) {
    v <- sample(1:range, 1)/range
    n <- sample(1:range, 1)/range

    if ( sqrt (v*v + n*n) <= 1) {
        f <- f + 1
    } else if ( v <=1 && n <= 1) {
        s <- s+1
    }
}

print ( f/s )

1 个答案:

答案 0 :(得分:4)

这是您代码的改进版本

range = 100000
v = runif(range)
n = runif(range)
f = sum(sqrt(v^2 + n^2) <= 1)

print(4 * f / range)

您应该使用runif而不是sample(...) / range从制服中获取样品。

s是不必要的,因为您正在计算f的次数,即您的随机点(v,n)在该象限的圆内,除以尝试绘制的次数,在您的情况下仅为range

您需要乘以4,因为f / range近似等于单位圆四分之一的面积。