使用 Monte Carlo 计算圆面积

Using Monte Carlo for computing circle area

我正在尝试编写一个函数 circle_MC,它将半径的长度和模拟次数 (N) 作为输入,returns 圆所包围的面积。

为此,我创建了一个数值向量并将其更改为“1”,如果该点在圆圈内,即 ifelse 语句成立。 到目前为止我的代码:

circle_MC <- function(r, N)
{
  inside <- numeric(N),#only zeroes
  
  x_sim[i] <-  runif(N, min = -r, max = r),
  y_sim[i] <-  runif(N, min = -r, max = r),
  inside <- ifelse(x_sim^2[i] + y_sim^2[i] <= r, 1, 0),
  area <- (sum(inside)/length(inside)*4)
  
  return(area)
}

但是,它给了我错误消息“错误:“}”中的意外'}'”。

我是 R 的新手,很想知道我的错误在哪里。

问题出在每个作业末尾的 ,。在这里,每个赋值都是一个单独的语句。目前尚不清楚 i 的来源,因为参数只有 'r' 和 'N'

circle_MC <- function(r, N)
{
  inside <- numeric(N) #only zeroes removed , 
  
  x_sim <-  runif(N, min = -r, max = r) # removed ,
  y_sim <-  runif(N, min = -r, max = r)  # removed ,
  inside <- ifelse(x_sim^2 + y_sim^2 <= r, 1, 0) # removed ,
  area <- (sum(inside)/length(inside)*4)
  
  return(area)
}

您可以避免 i,因为它不是循环(更新感谢@duckmayr):

#Function
circle_MC <- function(r, N)
{
  inside <- numeric(N)#only zeroes
  
  x_sim <-  runif(N, min = -r, max = r)
  y_sim <-  runif(N, min = -r, max = r)
  inside <- ifelse(x_sim^2 + y_sim^2 <= r^2, 1, 0)
  area <- ((sum(inside)/length(inside))*((2*r)^2))
  
  return(area)
}

输出:

#Code
circle_MC(2,100)

[1] 12.8