【问题标题】:Monte carlo simulation - what's wrong?蒙特卡罗模拟 - 怎么了?
【发布时间】:2021-08-23 10:13:21
【问题描述】:

我想用函数的蒙特卡罗模拟计算曲线下面积

。我想在区间 [-2, 2] 上计算它

我目前的工作

# 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 &lt;- runif(n, min = 0, max = 5) 并重新运行计算。

标签: r simulation montecarlo integral


【解决方案1】:

我们可以像这样尝试蒙特卡洛模拟

> n <- 1e6

> x <- runif(n, -2, 2)

> y <- runif(n, 0, 5)

> mean(x^2 + 1 - y >= 0) * 4 * 5
[1] 9.33014

其中面积可以计算为位于曲线下的平均点数x^2 + 1 -y &gt;=0

【讨论】:

    【解决方案2】:

    这是一个显示您正在使用的内容的情节。我希望它能帮助您更好地理解我在评论中写的内容:

    您似乎忽略了 y=1 下方的矩形。它的面积 (=4) 是缺失的数量。所以代码对于计算非偏移表达式 x^2 是正确的。更改为 y_n

    评论是答案的一半,即您没有模拟 y_n 的 0 和 1 之间的点。那些需要在蒙特卡洛模型中整合一个区域。另一个修改是将正确的总面积 [-2

    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 = 0, 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 * (5 * 4)
    #[1] 9.3429  inaccurate to 1 or 2 parts in 933
    

    显示第二种情况的 100 点图:

    您可能考虑的另一个模块是使用 set.seed 使您的计算可重现。

    【讨论】:

    • 我知道结果更接近真实结果,但我为什么要扩大它呢?它背后的直觉是什么?我认为最好在矩形 [1, 5] 中关闭这条曲线,因为 [-2, 2] 上 x^2 + 1 的最小值和最大值分别是 1 和 5。
    • @Lucian 当我们谈论曲线下的面积时,我们通常指的是曲线和 x 轴之间的面积。您计算的是在区间 x=[-2, 2] 上曲线 y=x^2+1 和 y=1 之间的面积。
    • @AkselA:看看添加的图是否有助于理解问题。
    • @AkselA。我很抱歉。我错误地处理了评论。应该去卢锡安。我很清楚你理解并清楚地描述了这些问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-02
    • 2012-04-26
    • 2015-02-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多