基于Python的蒙特卡罗方法估计Pi值的实现
蒙特·卡罗方法(Monte Carlo method),也称统计模拟方法,是二十世纪四十年代中期由于科学技术的发展和电子计算机的发明,而被提出的一种以概率统计理论为指导的一类非常重要的数值计算方法。是指使用随机数(或更常见的伪随机数)来解决很多计算问题的方法。与它对应的是确定性算法。蒙特·卡罗方法在金融工程学,宏观经济学,计算物理学(如粒子输运计算、量子热力学计算、空气动力学计算)等领域应用广泛。
MC方法通过随机模拟来解决问题,先想象一个圆心为(0.5,0.5),半径为0.5的圆,面积为π/4,设为S1,还有一个外切的正方形,面积为1,设为S2,现向正方形内随机掷点,假设掷点总数为N,其中落入圆内部的点的总数为M,那么落入圆内的概率为M/N。由几何概型,点落入圆内部的概率为S1/S2,那么由M/N=S1/S2即可推出π=4M/N。
首先模拟生成在正方形区域的随机点
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.patches as patchesdef get_random_points(N):np.random.seed(42)random_points = np.random.rand(N, 2)return random_points
这里的 np.random.seed(42) 是一个随机数种子,接下来定义一个估计圆周率的函数,分割为圆内和圆外两部分
# 计算pi的值,并将圆内外的点分开,方便做图
def cal_pi(random_points):inCircle_points = [] # 圆内部点outCircle_points = [] # 外部点(以及边上的点)for point in random_points:x = point[0]y = point[1]if (x - 0.5) ** 2 + (y - 0.5) ** 2 < 0.25:inCircle_points.append([x, y])else:outCircle_points.append([x, y])ratio = len(inCircle_points) / len(random_points)pi = 4 * ratioreturn pi, inCircle_points, outCircle_points
最后计算出估计值并进行可视化
def plot_data(random_points):pi_estimation, inCircle_points, outCircle_points = cal_pi(random_points)print('估计的pi值为:', pi_estimation)fig1 = plt.figure()# 绘制圆的轮廓ax1 = fig1.add_subplot(111, aspect='equal')ax1.add_patch(patches.Circle((0.5, 0.5), 0.5, fill=False, lw=2))# 绘制圆内外的点ax1.plot(np.array(inCircle_points)[:, 0], np.array(inCircle_points)[:, 1],'go', alpha=0.3, markersize=0.5)ax1.plot(np.array(outCircle_points)[:, 0], np.array(outCircle_points)[:, 1], 'ro', alpha=0.3, markersize=0.5)plt.axis([0, 1, 0, 1]) # 座标轴范围约束plt.title('$\pi\\approx' + str(pi_estimation) + '$')plt.show()
选取N为30000进行测试
if __name__ == '__main__':N = 30000random_points = get_random_points(N)plot_data(random_points)
运行结果及效果图如下
估计的pi值为: 3.1470666666666665
——参考百度百科、《数据分析入门》
基于Python的蒙特卡罗方法估计Pi值的实现相关推荐
- Python+numpy实现蒙特卡罗方法估计圆周率近似值
问题描述:使用蒙特卡罗方法估计圆周率近似值,具体描述详见以前发的文章蒙特.卡罗方法求解圆周率近似值原理与Python实现 技术要点:Python扩展库numpy中的模块random可以批量生成特定范围 ...
- python学习之 利用蒙特卡洛方法计算PI值
使用环境为python IDLE3.5. #利用蒙特卡洛方法计算PI值 from random import random from math import sqrt from time import ...
- Python语言学习:基于python五种方法实现使用某函数名【func_01】的字符串格式('func_01')来调用该函数【func_01】执行功能
Python语言学习:基于python五种方法实现使用某函数名[func_01]的字符串格式('func_01')来调用该函数[func_01]执行功能 目录 问题提出 代码五种设计思路 T1方法:e ...
- 从蒙特卡洛方法计算pi值谈random模块
计算机模拟常常需要用到随机选择的数.本文从随机数的一个简单应用开始简要地介绍Python的random模块. 使用蒙特卡洛方法计算pi值 Links:该问题来自于pudure university(普 ...
- Matlab--蒙特卡洛方法求pi值
Matlab--蒙特卡洛方法求pi值 蒙特·卡罗方法(Monte Carlo method),也称统计模拟方法,是二十世纪四十年代中期由于科学技术的发展和电子计算机的发明,而被提出的一种以概率统计理论 ...
- 【Python】蒙特卡罗方法计算圆周率及给定随机数种子
蒙特卡罗方法 利用随机点分布,让随机点足够的多,用指定区域随机点数与总区域随机点数做比值来求取指定区域面积 求解圆周率,在一个正方形中撒点,根据在1/4圆内点的数量占总撒点数的比例计算圆周率值. 代码 ...
- 德巴赫猜想python_哥德巴赫猜想问题基于Python的验证方法研究
1.概述 Python语言[1,2]是一门面向对象的解释型高级程序设计语言,其不仅开源,而且支持命令式编程,包含丰富且易理解的标准库和扩展库,可以快速生成程序的原型,帮助开发者高效地完成任务.同时,P ...
- python:蒙特卡罗方法计算圆周率
求解圆周率可以采用蒙特卡罗方法,在一个正方形中撒点,根据在1/4圆内点的数量占总撒点数的比例计算圆周率值. ...
- Python用蒙特卡罗方法计算圆周率近似值
实验目的: 1.理解蒙特Ÿ卡罗方法原理. 2.理解for循环本质与工作原理. 3.了解random模块中常用函数. 实验内容: 蒙特Ÿ卡罗方法是一种通过概率来得到问题近似解的方法,在很多领域都有重要的 ...
最新文章
- 5分钟让你懂得什么是容器技术?
- Delphi编程注意事项
- oracle数据库安装自动化,自动化Oracle数据库静默安装
- 浅谈Hibernate批量操作
- 无线Wifi模块AP和STA工作模式详解
- 提高网页打开速度的一些小技巧
- 软件测试用例.范文,软件测试用例模板范文.doc
- 条码仓库管理系统在食品行业中的应用
- 如何通过Matlab调用Aspen?
- mysql临键锁_innodb临键锁锁定范围
- java unexpected token解决方法
- Android添加大图通知栏消息
- CocosCreator幼麟麻将搭建步骤
- html铺满整个页面_html 怎么让背景图铺满整个页面?
- 防红域名生成的3种方法介绍
- 黑苹果11.0big sur驱动因特尔英特尔intel82599万兆网卡教程
- [531]微信之wxpy库(基于itchat库)
- 如何提高代码质量,或者说高质量代码的特征是什么
- 通过wireshark下载微信小程序视频一例
- javascript 之排列组合