zoukankan      html  css  js  c++  java
  • 利用蒙特卡洛方法对面积进行近似估算

    #对如下红色图形进行面积估算
    x = np.linspace(0, 2, 1000)#在0~2之间产生1000个样本点x y = x **3 #求出对应的y值 plt.plot(x, y) plt.fill_between(x, y, where=(y >0), color='red', alpha=0.5)#画出y>0的面积进行填充 plt.show()

     该红色区域在一个2×8的矩形方框里面。使用蒙特卡洛方法,随机在这个矩形里面产生大量随机点(数量为N),计算有多少点(数量为count)落在红色区域内(判断条件为y<x**3),count/N就是落在红色区域的点的比例,根据相应比例即可求出红色区域的面积。代码如下:

    x = np.linspace(0, 2, 1000)
    y = x ** 3
    plt.plot(x, y)
    plt.fill_between(x, y, where=(y >0), color='red', alpha=0.5)
    N
    = 10000 #样本点的总量为10000,越大估算出来的结果越精确 points = [[xy[0] * 2, xy[1] * 8] for xy in np.random.rand(N, 2)]# np.random.rand(N,2)表示产生N行2列的样本点,即N个2维样本点

    plt.scatter([x[0] for x in points], [x[1] for x in points], s=5, c=np.random.rand(N), alpha=0.5)
     plt.show()

    下面为估算有多少个点落在红色区域,并估算其面积。

    count = 0
    for xy in points:
        if xy[1] < xy[0] ** 3:
            count += 1
    print((count / N) * (2 * 8))

    结果:

          利用积分计算可知该红色区域的精确面积为4,如果样本点设置为1000,估算结果为4.24,如果样本点设置为10000,估算结果为3.968,所以样本点越多,估算越精确。

  • 相关阅读:
    一线架构师实践指南第三编阅读笔记
    学习七
    《信息领域热词分析》,如何设计编码实现六种质量属性战术
    学习六
    一线架构师实践指南第二部分阅读笔记
    学习五
    echarts实现省市区地图下钻
    python提取文本关键词
    后缀自动机复习笔记
    bzoj 1552
  • 原文地址:https://www.cnblogs.com/gczr/p/9132659.html
Copyright © 2011-2022 走看看