python割圆法求“圆周率”
欢迎加入我们卧虎藏龙的python讨论qq群:996113038
┉┉┉┉┉┉ 『导语』 ┉┉┉┉┉┉
割之弥细
所失弥少
割之又割
以至于不可割
则与圆合体而无所失矣
----------《海岛算经》刘徽
中国的圆周率比西方早了近一千年
可谓是古人伟大的发现之一
当古时智慧与现代技术相结合
又会碰撞出怎样的火花呢
接下来让我们一起
用现代的Python
循着古时割圆术的思路
求出圆周率这一奇妙的数字
¨¨¨『代码及相关资源获取』¨¨¨
1:关注“python趣味爱好者”公众号,回复“割圆法 ”获取源代码。
2:加入群聊:996113038。在群文件中下载源代码以及相关资料。
效果演示:
开发工具:
python3.6.4
相关第三方库:
math
turtle
往期精选:
押题?Python“学生成绩管理系统”
用Python“追踪”快递
讲解部分:
我们的代码分为两个,一个用来演示割圆法的原理,另一个用来计算割圆法的π值。
首先先讲一下割圆法的原理,其实很简单。大家看一看刚才那个视频就可以了。就是说。一个圆,我们怎样才能求出π。要知道,在中国古代,很长一段时间大家都求不出π的较精确值。
原理就是这样。我们假设存在一个正六边形,边长为1,当然,正六边形的“半径”也是1。
大家都知道这样一个公式:圆的周长=2*π*圆的半径。可以说,我们只需要得到了圆的周长,就可以通过:π=周长/(2*圆的半径)得到π的近似值。
割圆法的基本思路其实就是微积分的思路。即,把正n边形的每一条边都分隔成两个边,让正n边形变成正2n边形。求出正2n边形的边长,进而求出正2n边形的周长。
最后,通过微积分的思想,就可以让正n边形不断接近圆啦。
现在给大家讲一下代码:
import mathdef zu(n):## 假设边长为1def f(x): ## 由当前边长,求割后边长h = 1 - math.sqrt(1-(x/2)**2)return math.sqrt(h**2 + (a/2)**2)a = 1 ## 初始边长k = 6 ## 初始边数for i in range(n):a = f(a)k *= 2return a * k / 2if __name__ == '__main__':print(zu(10))print(math.pi)
以上就是求解π的完整代码,首先我们定义一个zu函数,这个函数就是求解π的函数。其中的形参就是n,代表迭代几次。a和k代表初始边长和初始边数,也就是说这是个边长为1的正6边形。
然后,我们定义一个f(x)来求出正n边形的边长,这个for循环迭代,里面的k是正多边形的边的数量,每次迭代,边的数量增加两倍,通过f(a)求出其半径。
for i in range(n):a = f(a)k *= 2
迭代结束后,我们通过
return a * k / 2
求出n边形的近似π值。用到的原理就是:π=周长/(2*圆的半径)
结果已经很接近了
不由得赞叹前辈们的智慧啊
本期分享到此结束
很高兴你能看到最后
作者|齐
编辑|潇洒哥
感谢大家观看
有钱的老板可以打赏一下小编哦
扫描下方二维码,关注我们~
参考资料:
https://github.com/tianlelyd/pythonPainting
https://blog.csdn.net/ggyhang/article/details/102541645
封面来源:花瓣网
python割圆法求“圆周率”相关推荐
- matlab利用作图法求圆周率
MATLAB本身,pi返回值最接近基本常数π的浮点数.要注意,MATLAB中定义的pi与基本常数π之间的微小差异会导致计算结果出现微小的误差. 例如,表达式sin(pi)(期望返回0)实际上在MATL ...
- 【Java】如何实现用割圆术求圆周率π
割圆术由我国古代数学家刘徽首创,其为计算圆周率建立了严密的理论和完善的算法,所谓割圆术,就是不断倍增圆内接正多边形的边数求出圆周率的方法. 刘徽指出:"割之弥细,所失弥少,割之又割,以至于不 ...
- python筛选法求素数讲解_埃氏筛选法求素数 Python
代码如下 def _odd_iter(): # 构建奇数序列 从3开始 n = 1 while True: n = n + 2 yield n def _not_divisible(n): retur ...
- 割圆法求π -----pyhon π的由来
圆周率的定义: 我们将圆周率定义为圆的周长与直径的比值.如果给你一个半径为1的单位圆,我们很容易就可以求得直径为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 ...
- 公式法求圆周率的近似值——泰勒公式展开 (内含double与float的比较)
泰勒公式是数学中求近似值的常用方法,利用泰勒公式展开,可以使许多问题简化,当然也需要多次循环,类似这样的情况,利用编程循环结构就是再好不过的选择了. 题目:计算π=4*(1-1/3+1/5-1/7+· ...
- python泰勒公式法求正弦函数_看完这篇让你高数不挂科之——泰勒公式
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天的文章我们来讨论大名鼎鼎的泰勒公式,泰勒公式真的非常有名,我相信上过高数课的一定都记得它的大名.即使你翘掉了所有的课,也一定会在考前重点 ...
- python泰勒公式法求正弦函数_正弦函数两种泰勒展开式的比较
正弦函数两种泰勒展开式的比较 张文华,汲守峰 [摘 要]摘要:讨论了正弦函数在两种不同情况下的泰勒公式展开式,并利用余项比较两种展开式 在近似计算中误差的大小区别,解释了正弦函数展开式中经常展开偶数项 ...
- 求圆周率算法(割圆术)c语言实现
1.算法设计原理分析 利用周长为1的圆的周长为2Π,采用割圆术,从开始的正六边形(周长为6),循环切割求正12边形.正24边形--的边长(勾股定理),从而求出正多边形的周长,来近似求解出2Π的值. 整 ...
- bbp公式求圆周率、python_【并行计算】六种方法计算圆周率
计算π的历史 圆周率π可能是科学界内外最广为人知的自然常数了.早在公元5世纪时,南朝宋数学家祖冲之用割圆法将圆周率计算到小数点后7位数字.大约同一时间,印度的数学家也将圆周率计算到了小数点后5位.历史 ...
最新文章
- 在线作图|如何绘制一张山脊图
- C#在WinFrom中Get/Post请求及QQ农场Cookie保存
- 计算机考试受苦受累,受苦受累真是福作文800字
- socket有关的一些扩展函数介绍
- Gentoo 安装日记 18(重新配置网络和设置密码)
- php mysql随机数不重复,js生成不重复的随机数
- 学习AOP 之前必须明白的几个概念
- 三星Galaxy Z Fold 3通过3C认证:搭载屏下摄像头技术
- Android Folding View(折叠视图、控件)
- Base64 的 JavaScript 实现 js-base64
- 最小化安装CentOS-7-x86_64-Minimal-1511图文教程
- 写失败数据写入成功_深度 | 缓存与数据库一致性问题剖析
- 织梦dedecms怎么让图片自适应屏幕大小
- 5.16 BScroll页面切换滑动失效,点击事件冒泡(未绑定click也会监听click),transition-group动画特例,BScroll未激活不允许任何事件调用,类的实例和对象
- DGND PGND GND AGND 精密电阻与普通电阻
- WinDriver 安装
- matlab积分器,MATLAB_SIMULINK__积分器相关操作
- 【HTML+CSS】移动端布局之流式布局
- itest(爱测试) 4.2.1 发布,开源BUG 跟踪管理 敏捷测试管理软件
- 美容院加盟十大品牌到底怎么选
热门文章
- oracle库sql根据拼音查汉字,根据拼音首字母模糊查询数据库中文字段
- ML Mastery 博客文章翻译 20220116 更新
- Tarjan 算法解决 LCA 问题
- python绘制三角函数图像_用python画三角函数
- matlab画随机信号,(最新整理)随机信号处理基础matlab仿真
- 【PAT】1105 Spiral Matrix(柳婼的思想详细解读)
- 移远BC35-GBC28BC95调试 步骤:从上电到发送一个http请求收到响应
- 飞思卡尔单片机CAN模块的物理特性的示波器观察
- 一个在线文本比较工具
- IDEA 格式化XML命令