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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。