蒙特卡罗方法是一种统计模拟方法,由冯·诺依曼和乌拉姆提出,在大量的随机数下,根据概率估计结果,随机数据越多,获得的结果越精确。下面我们将用python实现蒙特卡罗方法。

1.首先我们做一个简单的圆周率的近似计算,在这个过程中我们要用到随机数,因此需要先使用import numpy as np导入numpy库。

2.代码实现:

import numpy as np

total = 8000000

count = 0

for i in range(total):

x = np.random.rand()

y = np.random.rand()

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

if dis <= 1:

count = count+1

PI = 4*count/total

print(PI)

3.在上面的程序中我们用8000000个随机数进行投放,这样得到的结果会更精确一些,运行程序需要一定的时间,最终得到的结果如下

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

5.上面的图形是不规则的,我们只需知道在投放大量随机数的情况下,随机数在黑色部分出现的概率,再用总面积相乘即可估算黑色部分的面积。我们知道,黑色的rgb编码为(0,0,0),所以需要统计rgb编码为(0,0,0)时随机数的投放概率即可。

6.代码实现:

from PIL import Image

import numpy as np

im = Image.open("C:/Users/21974/Desktop/handwrite2.PNG")

total = 9000000

count = 0

defin = 0

width = im.size[0]

height = im.size[1]

for i in range(total): #用蒙特卡罗方法获得估计值

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

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

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

if k[0]+k[1]+k[2] == 0:

count += 1

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

for i in range(width): #用遍历获得准确值

for j in range(height):

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

if k[0] + k[1] + k[2] == 0:

defin += 1

print(defin)

上面的代码可分为两部分,第一个for后面是用蒙特卡罗方法获得的面积的估计值,第二个for后面是用遍历所有像素点的方法获得的面积的精确值,获得两个输出后进行对比。

我们在上面的程序中采用了9000000个随机数,可以看出两个输出结果相差并不大。

python蒙特卡洛方法圆周率_python实现蒙特卡罗方法教程相关推荐

  1. 蒙特卡洛python求解派_Python实现蒙特卡罗方法

    一.蒙特卡罗方法简介 蒙特卡罗(Monte Carlo)方法:简单来说,蒙特卡洛的基本原理简单描述是先大量模拟,然后计算一个事件发生的次数,再通过这个发生次数除以总模拟次数,得到想要的结果,精髓就是: ...

  2. python 蒙特卡罗_python实现蒙特卡罗方法教程

    蒙特卡罗方法是一种统计模拟方法,由冯·诺依曼和乌拉姆提出,在大量的随机数下,根据概率估计结果,随机数据越多,获得的结果越精确.下面我们将用python实现蒙特卡罗方法. 1.首先我们做一个简单的圆周率 ...

  3. python安装random库_python 库安装方法及常用库

    python库安装方法: 方法一:setpu.py 1.下载库压缩包,解压,记录下路径:*:/**/--/ 2.运行cmd,切换到*:/**/--/目录下 3.运行setup.py build 4.然 ...

  4. python定义一个数组_Python数组定义方法

    本文实例讲述了Python数组定义方法.分享给大家供大家参考,具体如下: Python中没有数组的数据结构,但列表很像数组,如: a=[0,1,2] 这时:a[0]=0, a[1]=1, a[[2]= ...

  5. python中sorted用法_Python中sorted()方法的用法

    1.先说一下iterable,中文意思是迭代器. Python的帮助文档中对iterable的解释是:iteralbe指的是能够一次返回它的一个成员的对象.iterable主要包括3类: 第一类是所有 ...

  6. python re库安装_python 库安装方法及常用库

    python库安装方法: 方法一:setpu.py 1.下载库压缩包,解压,记录下路径:*:/**/--/ 2.运行cmd,切换到*:/**/--/目录下 3.运行setup.py build 4.然 ...

  7. python中clock函数_Python time clock()方法

    Python time clock()方法 描述 Python 3.8 已移除 clock() 方法 可以使用 time.perf_counter() 或 time.process_time() 方法 ...

  8. 计算统计-Chap6 推断统计的蒙特卡罗方法 (3)蒙特卡罗方法

    很多时候,我们不清楚统计量的分布,或不确定对它所作的假设是否合理.蒙特卡罗模拟可以处理这些情况,它的应用包括: 1)当待检测统计量(the test statistics)从未知时,进行推断 2)当参 ...

  9. python isnumeric函数用法_Python中isnumeric()方法的使用简介

    Python中isnumeric()方法的使用简介 更新时间:2015年05月19日 09:35:06 投稿:goldensun 这篇文章主要介绍了Python中isnumeric()方法的使用,is ...

最新文章

  1. 【深度学习】拉格朗日( Lagrange)中值定理
  2. 使用JavaScript代码制作99乘法表
  3. The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
  4. com.android.phone已停止运行怎么解决方法,com.android.phone已停止运行怎么解决
  5. 无限式查找-----2013年2月28日
  6. 【二分图】【最大匹配】【匈牙利算法】CODEVS 2776 寻找代表元
  7. 6- vue django restful framework 打造生鲜超市 -完成商品列表页(下)
  8. ArcGIS Pro中的拓扑检查
  9. 基于聚类分析和因子分析的空气质量研究
  10. Java多线程系列--“JUC锁”03之 公平锁(一) (r)
  11. java最早的游戏_回忆S60(塞班)年代的JAVA游戏
  12. android程序毕业答辩ppt,软件毕业答辩PPT范例
  13. 解析java源文件_使用JDT.AST解析java源码
  14. 【安全防御】防火墙(二)
  15. android 检测软键盘,Android:检测软键盘打开
  16. IMP-00008错误
  17. 增强学习和OpeAI Gym的介绍:基础增强学习问题的演示
  18. 开始我的WebWork之旅
  19. 【秋招】秋招最全指南,如何准备,如何投递,以及面试攻略大全分享!
  20. 滴滴老年版来了,推出一键打车小程序,电话叫车服务

热门文章

  1. Unity Atlas
  2. python3画直方图出现“Polygon‘ object has no property ‘normed”
  3. 奋起之时,Ceph之父Sage Weil来华:产品化是唯一出路
  4. Kafka 的这些原理你知道吗
  5. JDK 的安装和配置(JDK 1.8)
  6. 物联网平台行业类型划分:CMP、DMP、AEP、BAP
  7. 什么是离散事件模拟(DES)
  8. golang的个人学习笔记以及错题集
  9. 多光纤推接 (MPO) 连接器
  10. table 中的col和colgroup