【发布时间】:2021-08-23 10:13:21
【问题描述】:
我想用函数的蒙特卡罗模拟计算曲线下面积
我目前的工作
# Define function f
f <- function(x) x^2 + 1
# I want to close my function in rectangle (-2, 2) - x axis and (1, 5) y -axis
n <- 10^6
# Randomize from x axis of rectangle
x_n <- runif(n, min = -2, max = 2)
# Randomize from y axis of rectangle
y_n <- runif(n, min = 1, max = 5)
# Calculate function values of randomized points
values <- f(x_n)
# Formula for are under the curve for monte carlo simulation is
# Area of rectangle * (Points below curve) / (Total number of points)
所以我的结果是:
> sum(y_n < values) / n * (4 * 4)
[1] 5.329888
这是不好的结果(正确的结果是 9.33333)。我做错了什么?当然,经过百万次采样后,算法应该更接近 9.3333
【问题讨论】:
-
您似乎忽略了 y=1 下方的矩形。它的面积 (=4) 是缺失的数量。所以代码对于计算非偏移表达式
x^2是正确的。更改为y_n <- runif(n, min = 0, max = 5)并重新运行计算。
标签: r simulation montecarlo integral