python计算圆周率代码_用算法实现计算圆周率-几何概型估算圆周率Python编程小程序...

本文介绍了一种通过概率几何方法计算圆周率的算法,并使用Python进行实现。通过向一个内切于正方形的圆中随机投掷豆子,统计落在圆内的豆子数量,进而估算圆周率。程序中设置了随机点数量的上下限以确保结果的准确性和计算资源的平衡。最终展示了一个Python代码示例,用于生成并计算圆周率的近似值。
摘要由CSDN通过智能技术生成

我在http://tieba.baidu.com/p/5953188922?traceid=看见了一个用 编程计算圆周率的方法 具体详细可以打开链接

发现原作者:百度用户阿泰 C531T因为编程语言的条件限制 故计算出的圆周率精确度有限 所以我这里教大家尝试用同样的算法用Python实现:

在此之前我们先来了解算法思路:

不知道各位是否记得自己做过这样一道数学题目:1cadee26eb7e20c13286677ae7d060e30fdc63df.png

在上面这个图形中,一个圆内切于一个正方形。假设正方形边长为 1,那么圆形的直径和正方形边长相等为 1,即半径为 0.5。

根据几何概型,向这个图形内随机抛一粒豆子,这粒豆子落入圆中的概率等于这个圆的面积占这个正方形的面积的比例。如果随机抛下的豆子足够多,那么落入圆中的豆子占所有豆子的比例,就近似等于这个圆的面积占这个正方形的面积的比例,即豆子落入圆中的概率。

设抛下的豆子总数为 n,落入圆中的豆子总数为 m,

则有 m/n=S圆/S正=𝜋𝑟 2/𝑎 2= 𝜋×0.5/1的平方= 0.25π

因此可估算出 𝜋= 4m/n

程序上实现如下:93aa950f73645b01a74d1682be3efab496892394.png

界面中,横坐标轴(x 轴)、纵坐标轴(y 轴)、一个以原点为左下角且边长为 1 的

正方形和一个内切于正方形的圆【以点(0.5, 0.5)为圆心,半径为 0.5,标准方程为

(x-0.5)

2 +(y-0.5) 2 =0.25】已经画好。

这时点击一下窗口,就可以输入随机点个数。随机点就类似于随机抛下的豆子。8c91ca9c09b4083ab19d1e44400a525086a1efa2.png

比如,输入随机点个数为 30000,结果如下bfed034257f7077a962fc944e2795b06a08a0464.png

注意,为保证圆周率估算结果尽量准确、可靠,随机点个数就应该尽可能多,所以随机点个数设置了下限:1000 个。同时,为避免随机点个数过多,导致电脑崩溃、内存溢出,随机点个数也设置了上限:50000 个。

注意 这里原作者用VB设计故随机点个数的上限是50000 个

但如果我们用Python的随机数实现的话 随机点的上限将可以认为是无限的!!只要你的计算机足够强大!

from random import random  # 随机函数

from time import perf_counter  # 对程序运行计时

darts = 1000 * 10000  # 足够多的数目

hits = 0.0  # 目前在圆内部点的数目

start = perf_counter()  # 当前系统时间

for i in range(1, darts + 1):

x, y = random(), random()  # 生成随机坐标值

dist = pow(x ** 2 + y ** 2, 0.5)  # 比较到圆心的距离是否为一

if dist <= 1.0:  # 在圆内部加1

hits = hits + 1

if i % 1000 == 0:

print('目前的进度是{}%'.format(i*100/darts))

pi = 4 * (hits / darts)

print("圆周率值是:{}".format(pi))

print("运行时间是:{:.5f}s".format(perf_counter() - start))

这就是Python代码和解析

还是不明白的朋友没有关系 可以点一个关注 我会更新视频教程的!

感谢大家的观看!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值