欢迎加入我们卧虎藏龙的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割圆法求“圆周率”相关推荐

  1. matlab利用作图法求圆周率

    MATLAB本身,pi返回值最接近基本常数π的浮点数.要注意,MATLAB中定义的pi与基本常数π之间的微小差异会导致计算结果出现微小的误差. 例如,表达式sin(pi)(期望返回0)实际上在MATL ...

  2. 【Java】如何实现用割圆术求圆周率π

    割圆术由我国古代数学家刘徽首创,其为计算圆周率建立了严密的理论和完善的算法,所谓割圆术,就是不断倍增圆内接正多边形的边数求出圆周率的方法. 刘徽指出:"割之弥细,所失弥少,割之又割,以至于不 ...

  3. python筛选法求素数讲解_埃氏筛选法求素数 Python

    代码如下 def _odd_iter(): # 构建奇数序列 从3开始 n = 1 while True: n = n + 2 yield n def _not_divisible(n): retur ...

  4. 割圆法求π -----pyhon π的由来

    圆周率的定义: 我们将圆周率定义为圆的周长与直径的比值.如果给你一个半径为1的单位圆,我们很容易就可以求得直径为2.然后就是求单位圆的周长,单位圆的周长我们是测不准的,因为我们只能测量线段的长度.我们 ...

  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 ...

  6. 公式法求圆周率的近似值——泰勒公式展开 (内含double与float的比较)

    泰勒公式是数学中求近似值的常用方法,利用泰勒公式展开,可以使许多问题简化,当然也需要多次循环,类似这样的情况,利用编程循环结构就是再好不过的选择了. 题目:计算π=4*(1-1/3+1/5-1/7+· ...

  7. python泰勒公式法求正弦函数_看完这篇让你高数不挂科之——泰勒公式

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天的文章我们来讨论大名鼎鼎的泰勒公式,泰勒公式真的非常有名,我相信上过高数课的一定都记得它的大名.即使你翘掉了所有的课,也一定会在考前重点 ...

  8. python泰勒公式法求正弦函数_正弦函数两种泰勒展开式的比较

    正弦函数两种泰勒展开式的比较 张文华,汲守峰 [摘 要]摘要:讨论了正弦函数在两种不同情况下的泰勒公式展开式,并利用余项比较两种展开式 在近似计算中误差的大小区别,解释了正弦函数展开式中经常展开偶数项 ...

  9. 求圆周率算法(割圆术)c语言实现

    1.算法设计原理分析 利用周长为1的圆的周长为2Π,采用割圆术,从开始的正六边形(周长为6),循环切割求正12边形.正24边形--的边长(勾股定理),从而求出正多边形的周长,来近似求解出2Π的值. 整 ...

  10. bbp公式求圆周率、python_【并行计算】六种方法计算圆周率

    计算π的历史 圆周率π可能是科学界内外最广为人知的自然常数了.早在公元5世纪时,南朝宋数学家祖冲之用割圆法将圆周率计算到小数点后7位数字.大约同一时间,印度的数学家也将圆周率计算到了小数点后5位.历史 ...

最新文章

  1. 在线作图|如何绘制一张山脊图
  2. C#在WinFrom中Get/Post请求及QQ农场Cookie保存
  3. 计算机考试受苦受累,受苦受累真是福作文800字
  4. socket有关的一些扩展函数介绍
  5. Gentoo 安装日记 18(重新配置网络和设置密码)
  6. php mysql随机数不重复,js生成不重复的随机数
  7. 学习AOP 之前必须明白的几个概念
  8. 三星Galaxy Z Fold 3通过3C认证:搭载屏下摄像头技术
  9. Android Folding View(折叠视图、控件)
  10. Base64 的 JavaScript 实现 js-base64
  11. 最小化安装CentOS-7-x86_64-Minimal-1511图文教程
  12. 写失败数据写入成功_深度 | 缓存与数据库一致性问题剖析
  13. 织梦dedecms怎么让图片自适应屏幕大小
  14. 5.16 BScroll页面切换滑动失效,点击事件冒泡(未绑定click也会监听click),transition-group动画特例,BScroll未激活不允许任何事件调用,类的实例和对象
  15. DGND PGND GND AGND 精密电阻与普通电阻
  16. WinDriver 安装
  17. matlab积分器,MATLAB_SIMULINK__积分器相关操作
  18. 【HTML+CSS】移动端布局之流式布局
  19. itest(爱测试) 4.2.1 发布,开源BUG 跟踪管理 敏捷测试管理软件
  20. 美容院加盟十大品牌到底怎么选

热门文章

  1. oracle库sql根据拼音查汉字,根据拼音首字母模糊查询数据库中文字段
  2. ML Mastery 博客文章翻译 20220116 更新
  3. Tarjan 算法解决 LCA 问题
  4. python绘制三角函数图像_用python画三角函数
  5. matlab画随机信号,(最新整理)随机信号处理基础matlab仿真
  6. 【PAT】1105 Spiral Matrix(柳婼的思想详细解读)
  7. 移远BC35-GBC28BC95调试 步骤:从上电到发送一个http请求收到响应
  8. 飞思卡尔单片机CAN模块的物理特性的示波器观察
  9. 一个在线文本比较工具
  10. IDEA 格式化XML命令