使用 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
我正在尝试编写一个函数 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