Monte Carlo R 中的方法
Monte Carlo Method in R
我正在尝试学习 R。我正在尝试编写一个计算(近似)圆周率的程序。
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 )
这是您的代码的改进版本[=19=]
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
近似于四分之一单位圆的面积。
我正在尝试学习 R。我正在尝试编写一个计算(近似)圆周率的程序。 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 )
这是您的代码的改进版本[=19=]
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
近似于四分之一单位圆的面积。