课堂笔记整理:割圆术计算圆周率的矩阵方法,高斯消元法及其Python求解。

割圆术

历史上阿基米德使用了接多边形利用周长计算圆周率的割圆术,刘徽和祖冲之使用了接多边形利用面积计算圆周率的割圆术。这里以周长法为例。

设圆直径

,圆的周长介于内接正

边形与外接正

边形之间:

其中

为正

边形的周长。

阿基米德通过割正96边形得到圆周率介于

之间。

矩阵加速

根据“正多边形周长逼近圆周率”的思想,可以考虑把正多边形的周长按边数

的倒数进行展开:

其中

为正多边形周长,展开式的第一项

为圆周率精确值,与

无关,可以理解为分母上为

阶,因此即为

。第二项为

的一阶项,相应展开系数为

......以此类推。

在实际求解中,不可能展开到无穷多阶,因此需要取截断,例如此处只取4项,即展开到

次方阶。

对圆内接正

边形,可得展开式:

同理,对圆内接正

边形,可得展开式

将该方程组写为矩阵形式:

4个方程对应4个未知数:

,求解即可得到圆周率的值。

下面使用高斯消元法进行求解。

高斯消元法

高斯消元法的思想是通过初等变换进行逐次消元,把方程组转化为等价的上三角方程组,之后从最后一个未知数开始逐次回带进行求解。

对于

矩阵方程:

将第1行乘消元系数

之后加到第

行,可以消去

项。对第2行到第n行进行该操作,可以将第1个元消去,使矩阵第1列中第1行以下元素全为0。

之后开始消第2个元:将第2行乘

加到第i行,可以消去

项。对第3行到第n行进行该操作,可以将第2个元消去,使矩阵第2列中第2行以下元素全为0。

......

重复操作

次,可以把系数矩阵化为上三角矩阵。

为更清楚地展示高斯消元法的原理,此处使用for循环进行描述。一般而言,使用numpy中的矩阵写法比for循环高效很多。

在逐次消元中,对第

个元进行消元操作,为第一层for循环。对第

个元的操作过程中,将第

列中

以下的元素

都消为0,为第二层for循环。在初等行变换中,

所在第

行的每一个元素

都需要进行相应的变换,为第三层for循环。列矢量

中每一行元素

也相应进行变换,

每个元素单独为1行,因此跟随第

的变换,位于第2层循环内。

化为上三角矩阵后,可以由第

行解得

,而

代入第

行,可以解得

,将

代入第

行......以此类推,得到方程的解。这一过程同样可以用for循环写,回带求解是逐次消元之后的步骤,因此该循环位于逐次消元的3重循环之外。

Python计算圆周率

def Gaussian(A, B): # 定义高斯消元函数

dimen = len(A)

for i in range(1, dimen): # 处理第i个元

for j in range(i, dimen):

ratio = A[j][i-1] / A[i-1][i-1] # 消元系数

for k in range(i-1, dimen):

A[j][k] = A[j][k] - A[i-1][k] * ratio # 消元

B[j] = B[j] - B[i-1] * ratio

B[dimen-1] = B[dimen-1] / A[dimen-1][dimen-1]

for i in range(dimen-2, -1, -1):

for j in range(dimen-1, i, -1):

B[i] = B[i] - A[i][j] * B[j]

B[i] = B[i] / A[i][i]

pi = B[i]

print('pi = ' + str(pi))

return B

编写函数时,有几个地方容易踩坑:range(a, b,1) 函数产生从

开始逐个递增1直到

的列表,range(b, a, -1) 产生从

开始逐个递减1直到

的列表,而矩阵的行(列)角标从0开始。

回到计算圆周率的矩阵方程:

,即内接正8、16、32、64边形,根据割圆术可得相应多边形周长为:

,使用高斯消元法求解为:

A = [[1, 1 / 8 ** 2, 1 / 8 ** 3, 1 / 8 ** 4], [1, 1 / 16 ** 2, 1 / 16 ** 3, 1 / 16 ** 4], [1, 1 / 32 ** 2, 1 / 32 ** 3, 1 / 32 ** 4], [1, 1 / 64 ** 2, 1 / 64 ** 3, 1 / 64 ** 4]]

B = [3.061467, 3.121445, 3.136548, 3.140331]

Gaussian(A, B)

输出:

pi = 3.14159273968254

同理,取外接正8、16、32、64边形,根据割圆术可得相应多边形周长为:

,计算得:

pi = 3.1415906412698416

相比之下,阿基米德割圆周长为正96边形,得到圆周率位于

~

之间(与

前3位数字相符),刘徽割圆面积为正192边形,得到圆周率位于

~

之间(与

前3位数字相符)。

使用矩阵改进的割圆术,在最多割圆为正64边形的情况下,可以求得圆周率位于

~

之间(与

前6位数字相符),而祖冲之得到类似精度的圆周率

~

(与

前6位数字相符),则割圆为正24576边形。

Reference:

2、周善贵,《计算物理》课程讲义

高斯消元法python编程_割圆术计算圆周率与矩阵高斯消元法(Python)相关推荐

  1. 割圆术c语言程序设计,c语言实现割圆术计算圆周率.pdf

    割圆术计算圆周率 "割圆术"是我国数学家刘徽创立的一种求圆周率的方法.思想是当圆的内 接正多边形的边数无限大时内接正多边形的面积就无限趋近于圆的面积,即所 谓 "割之弥细 ...

  2. 高等数学Mathematica实验题——2.1 - 15 用割圆术计算圆周率 (Calcaluation of π with cyclotomic method )

    题目: 2.1-15. 用割圆术计算圆周率(题干描述详见教材) an=Sqrt[2-2Sqrt[1-(an-1/2)^2]] Sn=3*2^(n-1)*Sn

  3. 使用割圆术计算圆周率

    使用割圆术计算圆周率 理论基础 圆周长计算公式: C = pi * d (C是圆的周长,pi是圆周率,d是直径) 推导可得 pi = C/d 所以我们只需要测量一定直径对应的周长即可算出圆周率. 思考 ...

  4. 大学生计算机python_人人都能学计算机:计算机科学入门与Python编程_学堂在线章节测试答案...

    查看答案 人人都能学计算机:计算机科学入门与Python编程_学堂在线章节测试答案 单击图层调板下方的新图层按钮可以产生新图层.A:错B:对 在图示的薄壁杆件截面图形中,形心与弯曲中心重合的截面有() ...

  5. python 科学计算基础教程电子版-自学Python 编程基础、科学计算及数据分析

    自学Python 编程基础.科学计算及数据分析 epub pdf mobi txt 下载 自学Python 编程基础.科学计算及数据分析 epub pdf mobi txt 下载 ☆☆☆☆☆ 李金 著 ...

  6. python编程入门与案例详解-自学Python 编程基础、科学计算及数据分析

    自学Python 编程基础.科学计算及数据分析 epub pdf mobi txt 下载 自学Python 编程基础.科学计算及数据分析 epub pdf mobi txt 下载 ☆☆☆☆☆ 李金 著 ...

  7. 《读九章学python》如何用Python编程实现少广术?

    卷四 少广 以御积幂方圆 随着人工智能概念的大火,其重要的支持语言Python也一路高歌猛,Python的设计哲学是"优雅.明确.简单". <九章算术>我国现存的最古老 ...

  8. Python编程新手看过来,如何求素数 (Python学习教程)

    本期的Python学习教程是针对新入门Python编程的新手来写的:关于怎么求素数! 一.什么是素数? 素数就是质数,通俗点说就是只能被1和其本身整数的数就是素数(1除外) 举个例子: 2,3,4,5 ...

  9. python 项目学编程_《从问题到程序:用Python学编程和计算》——3.5 练习-阿里云开发者社区...

    复习下面概念:数值积分,区间分割法,舍入误差,简单重复,累积,累积变量,生成和筛选,递推,递推变量,素数(质数),因子和真因子,哥德巴赫猜想,输入循环,输入控制的循环,递归定义,递归函数,循环定义,无 ...

  10. 高斯消元法python编程_高斯消元法的Python实现

    高斯消元法 节约内存的算法: 例1:用高斯消元法求解线性方程组: # -*- coding: utf-8 -*- """ 求解线性方程组: [12 -3 3] [x1] ...

最新文章

  1. xlrd.biffh.XLRDError: Excel xlsx file; not supported
  2. leetcode342合理运用位操作判断4的幂
  3. 三基站定位几何精度因子的简便运算
  4. flume案例-flume级联-配置文件编写
  5. C++ template函数模板
  6. 使用 Rxjs 解决 Angular Component 之间的通信问题
  7. python课程笔记_Python课程笔记(一)
  8. linux服务器MQ组件报警,服务器 有哪些告警
  9. 凸优化第五章对偶 5.7例子
  10. 【Vue】Aliplayer 视音频播放的实践与思考
  11. AD参数微分非线性(DNL)与积分非线性(INL)
  12. unity之摇杆和NPC
  13. 学linux好找工作吗?未来可以从事什么岗位?
  14. Python ord函数
  15. 台式计算机除尘方法,台式电脑怎么清理灰尘
  16. Pycharm + python 爬虫简单爬取网站数据
  17. 开放共赢 平安云AI生态合作开启
  18. 微软股价突破70美元 达到创历史最高
  19. 64位计算机连不上打印机,WIN1064位网络打印机已成功连接,无法打印.
  20. 使用跳板机实现外网访问局域网内虚拟机的大数据及K8S集群【借助向日葵】

热门文章

  1. PX4Flow使用操作
  2. Allegro PCB gerber文件输出 + ODB++文件输出
  3. Pthread线程基础学习
  4. Mugeda(木疙瘩)H5案例课—什么,才是福-岑远科-专题视频课程
  5. 阿铭Linux_传统IDC 部署网站学习笔记20190118
  6. Love Deterrence【MMD动作+镜头下载】
  7. 【Call Me Maybe】MMD镜头+动作打包下载.zip
  8. si4745 FM-AM-SW 音量控制芯片 驱动详解
  9. 原来PDF解密有这么多方法,你知道几个?
  10. CAN协议深度解析-简单易懂协议详解