我正在尝试学习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 )
答案 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
近似等于单位圆四分之一的面积。