news 2026/5/5 4:18:33

别再只会用math.pi了!用Python实现割圆法,亲手算一遍π才理解更深刻

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
别再只会用math.pi了!用Python实现割圆法,亲手算一遍π才理解更深刻

从正六边形到π:用Python重现刘徽的割圆术思想

当我们在Python中随手调用math.pi时,可曾想过这个神奇的数字是如何被计算出来的?公元263年,刘徽用正多边形逼近圆形的方法,将圆周率计算精确到3.1416。今天,我们将用现代编程语言重现这一数学思想实验。

1. 割圆法的几何原理

刘徽的割圆术核心思想很简单:用圆内接正多边形的周长来逼近圆的周长。随着边数增加,正多边形会越来越接近圆形。这个过程中有几个关键几何关系需要理解:

  • 初始条件:单位圆(半径=1)内接正六边形时,边长恰好等于半径(1)
  • 边长递推公式:已知正n边形的边长aₙ,可以通过勾股定理推导出正2n边形的边长a₂ₙ
  • 圆周率近似:正多边形的周长除以直径(2)就是π的近似值

具体推导过程如下:

import math def next_edge_length(current_length): """计算下一次分割后的新边长""" h = math.sqrt(1 - (current_length/2)**2) # 弦心距 return math.sqrt((current_length/2)**2 + (1 - h)**2) # 新边长

这个函数体现了割圆法的核心数学运算:通过当前边长计算下一次分割后的新边长。

2. Python实现割圆法计算π

让我们实现一个完整的割圆法计算程序,同时记录每次迭代的结果:

def compute_pi_cutting_circle(iterations): edges = 6 # 初始边数(正六边形) length = 1.0 # 初始边长 history = [] # 记录每次迭代结果 for i in range(iterations): # 计算当前π近似值 circumference = edges * length current_pi = circumference / 2 # 直径=2 # 记录当前状态 history.append((i, edges, current_pi)) # 计算下一次分割 length = next_edge_length(length) edges *= 2 return history

使用这个函数,我们可以观察π值是如何随着分割次数增加而逐渐精确的:

迭代次数边数π近似值误差
063.000000-0.141593
1123.105829-0.035764
2243.132629-0.008964
3483.139350-0.002243
4963.141032-0.000561
51923.141452-0.000141
1061443.1415926-0.0000001

3. 精度分析与算法优化

虽然割圆法原理简单,但在实际编程实现时,有几个关键因素会影响计算精度:

  1. 浮点数精度限制:Python的float类型使用IEEE 754双精度浮点数,约有15-17位有效数字
  2. 误差累积:每次迭代都会引入新的计算误差
  3. 收敛速度:割圆法的收敛速度是线性的,不如现代算法快

我们可以通过以下方式改进实现:

from decimal import Decimal, getcontext def precise_cutting_circle(iterations, precision=20): getcontext().prec = precision # 设置Decimal的精度 edges = 6 length = Decimal(1) for _ in range(iterations): h = (Decimal(1) - (length/2)**2).sqrt() length = ((length/2)**2 + (1 - h)**2).sqrt() edges *= 2 return (edges * length) / 2

使用高精度Decimal库后,我们可以获得更精确的结果:

  • 10次迭代:3.1415926535897932384626433832795028841971
  • 15次迭代:精确到小数点后28位

4. 可视化收敛过程

理解算法最好的方式之一是可视化。我们可以用matplotlib绘制π近似值随迭代次数的变化:

import matplotlib.pyplot as plt def plot_pi_convergence(max_iter=10): history = compute_pi_cutting_circle(max_iter) iterations = [x[0] for x in history] pi_values = [x[2] for x in history] plt.figure(figsize=(10, 6)) plt.plot(iterations, pi_values, 'o-', label='割圆法近似值') plt.axhline(y=math.pi, color='r', linestyle='--', label='math.pi') plt.xlabel('迭代次数') plt.ylabel('π近似值') plt.title('割圆法π值收敛过程') plt.legend() plt.grid(True) plt.show()

运行plot_pi_convergence(15)会显示π值如何快速收敛到真实值,让我们直观理解算法的有效性。

5. 与其他计算方法的对比

为了全面理解割圆法的特点,我们将其与其他经典π计算方法对比:

  1. 莱布尼茨级数法

    def leibniz_pi(terms): pi = 0 for k in range(terms): pi += (-1)**k / (2*k + 1) return 4 * pi
  2. 蒙特卡洛方法

    def monte_carlo_pi(samples): inside = 0 for _ in range(samples): x, y = random.random(), random.random() if x**2 + y**2 <= 1: inside += 1 return 4 * inside / samples

比较三种方法的特点:

方法收敛速度实现难度计算效率历史意义
割圆法中等中等中等最早算法
莱布尼茨级数简单分析代表
蒙特卡洛随机简单统计方法

在实际项目中,现代计算机通常使用更高效的算法如Chudnovsky算法,但割圆法作为历史上第一个严格计算π的方法,其教育价值不可替代。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/5 4:00:32

CodeGeeX2-6B实战:10个技巧教你写出完美的Python代码

CodeGeeX2-6B实战&#xff1a;10个技巧教你写出完美的Python代码 【免费下载链接】codegeex2-6b-int4 CodeGeeX2-6B&#xff1a;基于ChatGLM2的强大多语言代码生成模型&#xff0c;代码能力全面提升&#xff0c;全面支持AI编程助手&#xff0c;中英文双输入&#xff0c;助您编程…

作者头像 李华
网站建设 2026/5/5 4:00:14

Ollama网格搜索工具:自动化超参数调优与提示工程实践

1. 项目概述&#xff1a;自动化超参数网格搜索的利器在机器学习和深度学习模型开发中&#xff0c;超参数调优是决定模型最终性能的关键环节&#xff0c;也是最耗时、最考验耐心的“脏活累活”。手动调整学习率、批次大小、层数等参数&#xff0c;不仅效率低下&#xff0c;而且难…

作者头像 李华
网站建设 2026/5/5 3:59:17

Aurogen:基于OpenClaw范式的现代化多智能体平台部署与实战

1. 项目概述&#xff1a;Aurogen&#xff0c;一个更开放的“多爪”智能体平台 如果你和我一样&#xff0c;在过去一年里深度折腾过各种AI智能体框架&#xff0c;从OpenClaw到NanoBot&#xff0c;再到各种社区魔改版&#xff0c;那你一定体会过那种“选择困难症”和“部署劝退感…

作者头像 李华
网站建设 2026/5/5 3:59:15

YelpReviewFull数据集评估指南:7大指标全面衡量模型性能

YelpReviewFull数据集评估指南&#xff1a;7大指标全面衡量模型性能 【免费下载链接】yelp_review_full 项目地址: https://ai.gitcode.com/hf_mirrors/Yelp/yelp_review_full YelpReviewFull数据集是一个广泛用于情感分类任务的标准基准&#xff0c;包含65万条训练样本…

作者头像 李华
网站建设 2026/5/5 3:59:12

KVM热迁移卡住了?试试用QEMU的CPU Throttle给虚拟机“降降温”

KVM热迁移卡顿的救火方案&#xff1a;QEMU CPU Throttle实战指南 当你在深夜接到告警&#xff0c;发现某台关键业务虚拟机因宿主机维护需要紧急迁移&#xff0c;但迁移进度条却像蜗牛般缓慢爬行&#xff0c;甚至完全停滞——这种场景对云平台运维人员来说无异于噩梦。本文将深入…

作者头像 李华