开始使用免费开始使用

对一个简单函数做积分

这是一个引入 Monte Carlo 积分概念的简单练习。

这里我们将计算一个简单的定积分 $ \int_0^1 x e^{x} dx$。我们知道精确答案是 $1$,但用模拟只能得到近似解,所以可以预期结果会接近 $1$。正如视频中所示,过程很简单。对于单变量函数 $f(x)$:

  1. 获得 x 轴的取值范围 \((x_{min}, x_{max})\) 和 y 轴的范围 $(\max(f(x)), \min(\min(f(x)), 0))$。
  2. 在这个矩形框内生成若干均匀分布的随机点。
  3. 用矩形框的面积($(\max(f(x) - \min(f(x))\times(x_{max}-x_{min})$)乘以落在 \(f(x)\) 曲线之下的点所占比例。

完成后,您将掌握用 Monte Carlo 积分处理定积分的基本框架。

本练习是课程的一部分

Python 中的统计模拟

查看课程

练习说明

  • sim_integrate() 函数中,生成位于 xminxmax 之间的均匀随机数并赋值给 x
  • 生成位于 \(\min(\min(f(x)), 0)\) 与 \(\max(f(x))\) 之间的均匀随机数并赋值给 y
  • 返回小于 \(f(x)\) 的点的比例与面积的乘积($(\max(f(x) - \min(f(x))\times(x_{max}-x_{min})$)。
  • 最后,使用 lambda 函数将 func 定义为 $x e^{x}$。

交互式实操练习

通过完成这段示例代码来试试这个练习。

# Define the sim_integrate function
def sim_integrate(func, xmin, xmax, sims):
    x = np.random.uniform(____, ____, sims)
    y = np.random.uniform(____, ____, sims)
    area = (max(y) - min(y))*(xmax-xmin)
    result = area * sum(____(____) < abs(func(x)))/sims
    return result
    
# Call the sim_integrate function and print results
result = sim_integrate(func = lambda x: ____, xmin = 0, xmax = 1, sims = 50)
print("Simulated answer = {}, Actual Answer = 1".format(result))
编辑并运行代码