python实现蒙特卡洛算法,python蒙特卡洛法求面积

  python实现蒙特卡洛算法,python蒙特卡洛法求面积

  蒙特卡罗方法是一种统计模拟方法,由霸气毛巾和ulam提出。在大量随机数下,根据概率估计结果,随机数据越多,结果越准确。接下来,我们将在python中实现蒙特卡罗方法。

  1.首先,我们对圆周率做一个简单的近似计算。在这个过程中,我们需要使用随机数,所以需要先用import numpy作为np来导入numpy库。

  2.代码实现:

  将numpy作为np导入

  总计=8000000

  计数=0

  对于范围内的I(总计):

  x=np.random.rand()

  y=np.random.rand()

  dis=(x**2 y**2)**0.5

  如果dis=1:

  计数=计数1

  PI=4 *计数/总数

  打印(PI)

  3.在上面的程序中,我们使用8,000,000个随机数来传递,这样结果会更准确。运行程序需要一定的时间,最终结果如下

  4.下面我们做一个简单的应用。下图是我在画图工具里随便画的。我们可以用蒙特卡罗方法来估算图中黑色部分的面积。

  5.上图是不规则的。我们只需要知道大量随机数投入时,随机数出现在黑色部分的概率,然后乘以总面积就可以估算出黑色部分的面积。我们知道黑色的rgb码是(0,0,0),所以我们需要统计rgb码是(0,0,0)时随机数的概率。

  6.代码实现:

  从PIL进口图片

  将numpy作为np导入

  im=image . open( C:/Users/21974/Desktop/hand write 2。PNG’)

  总计=9000000

  计数=0

  定义=0

  width=im.size[0]

  height=im.size[1]

  对于范围内的I(总数):#用蒙特卡罗方法得到估计值。

  x=np.random.randint(0,width-1)

  y=np.random.randint(0,height-1)

  k=im.getpixel((x,y))

  如果k[0] k[1] k[2]==0:

  计数=1

  print(int(width * height * count/total))

  对于范围内的I(宽度):#通过遍历获得精确值

  对于范围内的j(高度):

  k=im.getpixel((i,j))

  如果k[0] k[1] k[2]==0:

  defin=1

  打印(定义)

  上面的代码可以分为两部分。第一个for之后是通过蒙特卡罗方法获得的估计面积,第二个for之后是通过遍历所有像素获得的精确面积。比较两个输出。

  我们在上面的程序中使用了9,000,000个随机数,可以看到两个输出结果没有太大的区别。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: