目录

1、公式法

2、蒙特卡洛(Monte Carlo)方法


圆周率(Pi)是圆的周长与直径的比值,一般用希腊字母 π 表示,是一个在数学及物理学中普遍存在的数学常数。日常生活中,通常都用3.14代表圆周率去进行近似计算。

π 是一个无理数,即无限不循环小数。历史上不少数学大师穷一生精力计算其精确近似值。公元480年左右,南北朝时期的数学家祖冲之利用割圆法,将 π 精确到小数点后7位,给出不足近似值3.1415926和过剩近似值3.1415927,还得到两个近似分数值,密率355/113和约率22/7。之后的800年里,其计算出的 π 值都是最准确的。

随着计算机的出现,π 值计算有了突飞猛进的发展。2021年8月17日,美国趣味科学网站报道,瑞士研究人员使用一台超级计算机,历时108天,将 π 计算到小数点后62.8万亿位,创下该常数迄今最精确值记录。

本文简要介绍两种方法。

1、公式法

1995年,美国三位算法学家 Bailey-Borwein-Plouffe 共同提出一震惊数学界的公式,即著名的BBP公式,将 π 计算公式推向高峰:

其代码如下:

#圆周率计算公式法pi=0
N=eval(input())for k in range(N):pi+=1/pow(16,k)*(4/(8*k+1)-2/(8*k+4)-1/(8*k+5)-1/(8*k+6))print(pi)

当 N 赋值100时,所得 π 值为3.141592653589793,非常精确,随着 N 赋值的增大,可能越来越精确,当然,伴随的是计算时间的延长。

2、蒙特卡洛(Monte Carlo)方法

蒙特卡洛为地名而非人名,位于赌城摩纳哥,象征概率。该方法由大名鼎鼎的数学家冯·诺伊曼提出,诞生于上世纪40年代美国的“曼哈顿计划”。原理是通过大量随机样本,去了解一个系统,进而得到所要计算的值。

鉴于一个正方形内切圆和正方形的面积之比为 π/4,在该正方形内部,随机填充 n 个点(这些点服从均匀分布),若它们与中心点的距离不大于圆的半径,则这些点均落在圆的内部。统计圆内的点数,与 n 的比值乘以4,就是 π 的值。理论上,n 越大,计算的 π 值越准。

其代码为:

from random import *
seed(100)     #设定种子以固定随机数dot=0
dots=eval(input('请输入您想填充的点数:')) for i in range(1,dots+1):x,y=random(),random()r=pow(x**2+y**2,0.5)if r<=1:dot+=1
pi=4*(dot/dots)
print('所得圆周率为:{}'.format(pi))

当圆内填充点为10000个时,所得 π 值为3.1396,1000000时为3.143964,100000000时则为3.1418574。理论上,填充点数越多,计算的 π 值越精准,随之而来的,则是时间的延长……如果感兴趣,您也可以调用 time.perfcounter() 函数看一下不同填充点数时所需的时间☺。

Python 之圆周率 π 的计算相关推荐

  1. 【Python】圆周率的计算

    1.公式法  代码: #CalPiV1.py pi=0 N=100 for k in range(N):pi+=1/pow(16,k)*(\4/(8*k+1)-2/(8*k+4)-\1/(8*k+5) ...

  2. python语言公式求圆周率_通过Python实现圆周率的计算(公式方法和蒙特卡罗方法)...

    1.通过公式计算圆周率 当k正无穷 π=[1/16^k*(4/(8*k+1)-2/(8*k+4)- 1/(8*k+5)-1/(8*k+6))] 实现如下 #cal pi = 0 N = 100 for ...

  3. 通过Python实现圆周率的计算(公式方法和蒙特卡罗方法)

    1.通过公式计算圆周率     当k正无穷     π=[1/16^k*(4/(8*k+1)-2/(8*k+4)- 1/(8*k+5)-1/(8*k+6))]      实现如下 #cal pi = ...

  4. Python入门实例验证及结果之实例7 圆周率的计算 ##程序循环结构 ##random库

    2020年月10日星期一 我们先来整理一下程序循环结构和random库的相关内容 #程序循环结构 ##遍历循环 1.计数循环 说明:range(M,N,K)函数是从M开始到N之前以K为步长的数字序列, ...

  5. 【无标题】python利用公式法计算圆周率

    # 计算圆周率(公式法) i = 1 j = 1 s = 0 print('******圆周率公式法******') for i in range(1, 100):print(f'循环{i}次,第一次 ...

  6. 《从问题到程序:用Python学编程和计算》——2.12 练习

    本节书摘来自华章计算机<从问题到程序:用Python学编程和计算>一书中的第2章,第2.12节,作者:裘宗燕 更多章节内容可以访问云栖社区"华章计算机"公众号查看. 2 ...

  7. 《从问题到程序:用Python学编程和计算》——练习

    本节书摘来自华章计算机<从问题到程序:用Python学编程和计算>一书中的第2章,练习,作者 裘宗燕,更多章节内容可以访问云栖社区"华章计算机"公众号查看. 练习 概念 ...

  8. 《从问题到程序:用Python学编程和计算》——第2章 计算和编程初步 2.1 数值表达式和算术...

    本节书摘来自华章计算机<从问题到程序:用Python学编程和计算>一书中的第2章,第2.1节,作者 裘宗燕,更多章节内容可以访问云栖社区"华章计算机"公众号查看. 第2 ...

  9. python编写自定义函数计算一维numpy数组中与指定目标数值最接近(距离最近)的数值(find closest value in numpy array to a certain value)

    python编写自定义函数计算一维numpy数组中与指定目标数值最接近(距离最近)的数值(find closest value in numpy array to a certain value) 目 ...

最新文章

  1. 亲测可以使用的:Maven将中央仓库修改为阿里云的maven仓库
  2. 架构演进之「微服务架构」
  3. PM2管理node.js
  4. npm命令的--save 与--save-dev
  5. Leetcode-5846.周赛 找到数组的中间位置
  6. PaddlePaddle训练营——公开课——AI核心技术掌握——第1章迈入现代人工智能的大门——深度学习简介
  7. c语言联合验证大小端存储,2021C语言面试题及答案.docx
  8. 力扣反转字符串中的元音字母
  9. 对矩阵进行QR分解的Matlab代码
  10. java 生成 序列号_Java并发编程-生成唯一序列号
  11. ADS2017之S参数仿真
  12. Oracle数据库日志存放位置
  13. linux上复制文件命令是什么,Linux复制文件用什么命令怎么用
  14. “枪型思维”产品设计新探索 | 基金持仓诊断
  15. SequoiaDB 巨杉数据库产品下载
  16. kpi绩效考核流程图_松松客服KPI绩效考核表经验分享
  17. mysql没开启binlog恢复数据_MySQL:binlog恢复数据
  18. 模型量化论文阅读#2----BRECQ: PUSHING THE LIMIT OF POST-TRAINING QUANTIZATION BY BLOCK RECONSTRUCTION
  19. html 如何把文字和图片放到一行,DIV+CSS图片和文字如何显示同一行
  20. Java 实例 - 字符串分割和字符串分隔

热门文章

  1. 腾讯——云计算从业者认证系列1
  2. 12月份参加工作的年假怎么休_请问我的年假可以在12月份休吗?单位说可以12月1日就不用上班了,我可以上到12月28日吗?...
  3. linux课程设计网络应用,Linux技术应用课程设计的详细实例资料说明
  4. java生成报文_生成xml报文方法并输出
  5. java excel文件转html
  6. BFS + 状态压缩总结
  7. 个性化广告推荐系统(实战)-1-协同过滤篇
  8. Java类加载及对象创建过程详解
  9. 国产CPU产业链的逻辑架构
  10. 罗密欧与朱丽叶的迷宫问题