【问题描述】
假设有一个单位圆,其面积就是π,
单位圆的外接正方形的边长为2,故正方形的面积是4
在正方形内随机产生m个点,假设落在圆内的点的数量为n,则n/m近似等于圆与正方形的面积比
也就是n/m=π/4,据此可以求出π的近似值
要求,
m的值在运行时通过input输入
随机数种子设为100,也就是在for循环之前使用如下语句
random.seed(100)
提示: 产生[-1,1]之间的随机小数可以用random库的uniform函数
【输入形式】整数
【输出形式】保留3位小数
【样例输入】
10000
【样例输出】
3.140
【解题思路】
我们可以虚拟一个场景,在x-y直角坐标系中有一个边长为2,中心再原点的正方形,内部有一个内切单位圆。

那么我们以这个正方形为界限,在正方形内部随机生成坐标点(x,y),计算点到圆心(坐标原点(0,0))的距离 len, 通过与圆半径1作比较是否在在圆内,若在圆内部则n的数值+1。
需要注意的是:
1. 因为选择(0,0)作为坐标原点,那么随机数的生成范围是【-1,1】,uniform(a,b)函数的作用是生成【a,b】之间的随机浮点数。
2. 关于随机数种子,真正意义上的随机数(或者随机事件)在某次产生过程中是按照实验过程中表现的分布概率随机产生的,其结果是不可预测的,是不可见的。但是计算机中的随机函数是按照一定算法模拟产生的,其结果是确定的,是可见的
而随机数种子 seed( ) 用于指定随机数生成时所用算法开始的整数值,如果使用相同的seed( )值,则每次生成的随即数都相同(一个种子值对应一个随机数序列),如果不设置这个值,则系统根据时间来自己选择这个值,此时每次生成的随机数因时间差异而不同。

【Python代码】

import random
m = int(input())
n = 0
random.seed(100)
for i in range(m):x = random.uniform(-1,1)y = random.uniform(-1,1)len = pow(x**2+y**2,0.5)if len < 1:n += 1
pi = 4*(n/m)
print("%.3f"%pi)

使用蒙特卡罗方法计算圆周率π Python相关推荐

  1. Python用蒙特卡罗方法计算圆周率近似值

    实验目的: 1.理解蒙特Ÿ卡罗方法原理. 2.理解for循环本质与工作原理. 3.了解random模块中常用函数. 实验内容: 蒙特Ÿ卡罗方法是一种通过概率来得到问题近似解的方法,在很多领域都有重要的 ...

  2. 【Python】蒙特卡罗方法计算圆周率及给定随机数种子

    蒙特卡罗方法 利用随机点分布,让随机点足够的多,用指定区域随机点数与总区域随机点数做比值来求取指定区域面积 求解圆周率,在一个正方形中撒点,根据在1/4圆内点的数量占总撒点数的比例计算圆周率值. 代码 ...

  3. python:蒙特卡罗方法计算圆周率

    求解圆周率可以采用蒙特卡罗方法,在一个正方形中撒点,根据在1/4圆内点的数量占总撒点数的比例计算圆周率值.‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭ ...

  4. Python项目实践:蒙特卡罗方法计算圆周率

    一.数学思维 # CalPi.py n = 100 Pi = 0 for k in range(n):Pi += 1 / pow(16, k) * (4 / (8 * k + 1) - 2 / (8 ...

  5. 使用蒙特卡罗方法计算圆周率

    介绍 这个东西网上已经有很多相关的内容了, 我只是对这个过程感兴趣, 所以自己来做了一个. 网上, 大多数纯粹计算的, 对于我这种视觉型的人来说, 还是要看一下比较好. 这里我加入了 matplotl ...

  6. 种子数是123,如何用蒙特卡罗方法计算圆周率

    #pi.py from random import random,seed DARTS=eval(input()) seed(123) hits=0.0 for i in range (DARTS): ...

  7. 蒙特卡洛方法计算圆周率

    import random import mathdef calpai():n = 10000000 #随机实验次数r = 1.0 #圆的半径a, b = (0.0, 0.0) #中心点x_neg, ...

  8. Python+numpy实现蒙特卡罗方法估计圆周率近似值

    问题描述:使用蒙特卡罗方法估计圆周率近似值,具体描述详见以前发的文章蒙特.卡罗方法求解圆周率近似值原理与Python实现 技术要点:Python扩展库numpy中的模块random可以批量生成特定范围 ...

  9. 用蒙特卡罗方法实现圆周率的计算

    用蒙特卡罗方法实现圆周率的计算 要求(以下分析结果要在实验报告上体现): 根据所得到PI值的精确度(前后两次PI值的差,小于0.0001)来确定是否终止实验. 对比不同精确度(0.01, 0.001, ...

最新文章

  1. VSTS LoadTest使用原则
  2. java如何处理csv文件上传_java处理csv文件上传示例
  3. 崛起的超级智能:是否会是下一个“麦克卢汉式”预言?
  4. win11+AMD的cpu+3060GPU电脑安装 tensorflow-GPU+cuda11+cudnn
  5. Emacs 快速指南
  6. nodejs: mkdirs 递归创建目录
  7. 二叉树遍历(深度优先+广度优先)
  8. PHP7.1安装memcaehd扩展
  9. C语言:求X的Y次方
  10. TeamTalk源码分析(1)
  11. ArcGIS在洪水普查、风险评估及区划应用
  12. win10 开机自动启动脚本
  13. Linux 内核签名(签名内核模块)、linux 驱动签名
  14. 陈莉君: Linux内核的那些书
  15. 腾讯优图实现人脸对比
  16. 使用c语言编程首先要新建,【C语言编程入门系列】—— 第三章,编写第一个C语言程序!...
  17. 使用vigil 监控微服务系统包含可视化界面
  18. 二叉树中序遍历(递归+非递归)Java
  19. python中.mat的图像数据怎么转换为.npy的数据
  20. 重贴:MFC类中获得其它类指针 (转)

热门文章

  1. 2020牛客寒假算法基础集训营4(A:欧几里得)(规律题)
  2. 普渡大学电子计算机专业,普渡大学电子与计算机工程专业硕士录取!
  3. h5活动是什么意思_H5是什么_H5页面是什么_什么意思_企业服务汇
  4. 字节LastDay,告别十个月的实习生活,流水账与一些思考
  5. XML文件的一些操作
  6. 1路串口服务器在激光测距仪的应用
  7. 【数据结构】算法的时间复杂度和空间复杂度解析
  8. 去中心化交易所与中心化交易所的优劣势对比
  9. js去掉最后一个逗号
  10. Unity3D操作数据之Txt文档操作(创建、读取、写入、修改)