使用蒙特卡洛计算圆面积

时间:2020-09-06 18:03:46

标签: r montecarlo

我正在尝试编写一个函数circle_MC,该函数将半径的长度和模拟次数(N)作为输入,并返回由圆包围的区域。

为此,我创建了一个数值向量并将其更改为“ 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很陌生,很想知道我的错误在哪里。

2 个答案:

答案 0 :(得分:1)

问题是每次分配末尾的,。在这里,每个分配都是一个单独的语句。目前尚不清楚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)
}

答案 1 :(得分:1)

您可以避免>>> from pyformatting import optional_format >>> opening_line = '{greetings} {name} !!!' >>> optional_format(opening_line, greetings='hii') 'hii {name} !!!' ,因为它不是循环(由于@duckmayr而更新):

i

输出:

#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)
}