Python 之圆周率 π 的计算
目录
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 之圆周率 π 的计算相关推荐
- 【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) ...
- 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 ...
- 通过Python实现圆周率的计算(公式方法和蒙特卡罗方法)
1.通过公式计算圆周率 当k正无穷 π=[1/16^k*(4/(8*k+1)-2/(8*k+4)- 1/(8*k+5)-1/(8*k+6))] 实现如下 #cal pi = ...
- Python入门实例验证及结果之实例7 圆周率的计算 ##程序循环结构 ##random库
2020年月10日星期一 我们先来整理一下程序循环结构和random库的相关内容 #程序循环结构 ##遍历循环 1.计数循环 说明:range(M,N,K)函数是从M开始到N之前以K为步长的数字序列, ...
- 【无标题】python利用公式法计算圆周率
# 计算圆周率(公式法) i = 1 j = 1 s = 0 print('******圆周率公式法******') for i in range(1, 100):print(f'循环{i}次,第一次 ...
- 《从问题到程序:用Python学编程和计算》——2.12 练习
本节书摘来自华章计算机<从问题到程序:用Python学编程和计算>一书中的第2章,第2.12节,作者:裘宗燕 更多章节内容可以访问云栖社区"华章计算机"公众号查看. 2 ...
- 《从问题到程序:用Python学编程和计算》——练习
本节书摘来自华章计算机<从问题到程序:用Python学编程和计算>一书中的第2章,练习,作者 裘宗燕,更多章节内容可以访问云栖社区"华章计算机"公众号查看. 练习 概念 ...
- 《从问题到程序:用Python学编程和计算》——第2章 计算和编程初步 2.1 数值表达式和算术...
本节书摘来自华章计算机<从问题到程序:用Python学编程和计算>一书中的第2章,第2.1节,作者 裘宗燕,更多章节内容可以访问云栖社区"华章计算机"公众号查看. 第2 ...
- python编写自定义函数计算一维numpy数组中与指定目标数值最接近(距离最近)的数值(find closest value in numpy array to a certain value)
python编写自定义函数计算一维numpy数组中与指定目标数值最接近(距离最近)的数值(find closest value in numpy array to a certain value) 目 ...
最新文章
- 亲测可以使用的:Maven将中央仓库修改为阿里云的maven仓库
- 架构演进之「微服务架构」
- PM2管理node.js
- npm命令的--save 与--save-dev
- Leetcode-5846.周赛 找到数组的中间位置
- PaddlePaddle训练营——公开课——AI核心技术掌握——第1章迈入现代人工智能的大门——深度学习简介
- c语言联合验证大小端存储,2021C语言面试题及答案.docx
- 力扣反转字符串中的元音字母
- 对矩阵进行QR分解的Matlab代码
- java 生成 序列号_Java并发编程-生成唯一序列号
- ADS2017之S参数仿真
- Oracle数据库日志存放位置
- linux上复制文件命令是什么,Linux复制文件用什么命令怎么用
- “枪型思维”产品设计新探索 | 基金持仓诊断
- SequoiaDB 巨杉数据库产品下载
- kpi绩效考核流程图_松松客服KPI绩效考核表经验分享
- mysql没开启binlog恢复数据_MySQL:binlog恢复数据
- 模型量化论文阅读#2----BRECQ: PUSHING THE LIMIT OF POST-TRAINING QUANTIZATION BY BLOCK RECONSTRUCTION
- html 如何把文字和图片放到一行,DIV+CSS图片和文字如何显示同一行
- Java 实例 - 字符串分割和字符串分隔