• 圆周率PI 几千年的进展


    原来一直没弄明白的圆周率,突然想给小孩子讲圆的周长怎么计算的,结果PI都不会,计算啥!原来PI计算了几千年 才有的结果。


    1、蒙特卡洛法:非常直观易懂,但效率极低

    蒙特卡洛是欧洲著名赌城,编程中采用的蒙特卡洛法就是指用随机数的方法。

    设想一个正方形,边长a=2,则其内接圆的半径r=1,则圆和正方形的面积比是:

    Sy/Sz=πr2/a2=π/4

    因此,

    π=4Sy/Sz

    我们用蒙特卡洛法来获得面积比Sy/Sz:让计算机产生很多的随机点(x,y),其中x、y都是[0,1]之间的随机数,可以用判断 (x2+y2) 是否小于1的方法来确定是否在圆内,则圆内的点数代表圆面积,总点数代表总面积,两者相除就是面积比Sy/Sz。

    2、割圆迭代法:也很直观易懂,效率还不错

    现在我们用刘徽和祖冲之的割圆术试试。

    原理是这样的:设想一个圆,半径r=1,内接一个正n边形,边长为a,那么当这个多边形的边数n越大,它的周长就越接近圆的周长。所以我们就可以用多边形的周长代替圆的周长并应用圆的周长公式得到:

    π=na/2

    圆的内接正n边形边长a可以迭代计算:

    a[n]=sqrt(2−2sqrt(1−(a[n/2]/2)2))

    我们从正六边形开始,它的边长a=r=1,然后计算正12边形、正24边形、正48边形...逐渐逼近圆。

    1. 内接正n边形 π计算结果
    2. 6 3.000000000000
    3. 12 3.105828541230
    4. 24 3.132628613281
    5. 48 3.139350203047
    6. 96 3.141031950891
    7. 192 3.141452472285
    8. 384 3.141557607912
    9. 768 3.141583892149
    10. 1536 3.141590463237
    11. 3072 3.141592106043
    12. 6144 3.141592516588
    13. 12288 3.141592618641
    14. 24576 3.141592645321
    15. 49152 3.141592645321
    16. 98304 3.141592645321

    3、梅钦级数法:不直观但也易懂,效率略高

    Boss梅钦(John Machin)用他的神奇公式亲手把π算到了小数点后100位,今天,我们借助Python编程,可以远远超过这个精度。

    梅钦公式:

    π=16arctan(1/5)−4arctan(1/239)

    mathematica

    1. Clear["Global`*"]
    2. expi0 = N[Pi, 50];
    3. ex1 = 16 ArcTan [1/5] - 4 ArcTan [1/239]
    4. N[ex1, 100]
    5. arctan[x_] := Normal[Series[ArcTan [x], {x, 0, 30}]]
    6. ex2 = ArcTan[1/5];
    7. Print["原函数:", N[ex2, 30]]
    8. ex3 = arctan[a]
    9. a = 1/5;
    10. Print["级数化简后:", N[ex3, 30]]
    11. ex5 = ex2 - ex3;
    12. N[ex5, 30]
    13. exout = 16 arctan [x] - 4 arctan [y]
    14. x = 1/5;
    15. y = 1/239;
    16. expi0
    17. expi1 = N[exout, 50]
    18. expi0 - expi1

    4. 拉马努金 也算是神公式  计算也比较快

    计算12次,只能到8位的精度 

    5. Chudnovsky在拉马努金公式 下再优化  

     只用计算6次就能到99位精度

    1. ex1 = Sum[((-1)^
    2.       k*(6 k)!*(13591409
    3.        545140134 k))/((3 k)!*(k!)^3*640320^(3 k + 3/2)), {k, 0
    4.    n}];   (* Chudnovsky *)
    5. chud[n_] := 
    6.  N[1/(12*Sum[((-1)^
    7.           k*(6 k)!*(13591409
    8.            545140134 k))/((3 k)!*(k!)^3*640320^(3 k + 3/2)), {k, 0
    9.        n}]), 100];
    10. a2 = chud[6]

    6.目前最优化方法  高斯 - 勒让德算法Gauss\[Dash]Legendre algorithm

     

     只用计算6次 就能精确到小数后171位

    1. Clear["Global`*"]
    2. precision = 10000;
    3. Print["==>正确的圆周率:"]
    4. pi1 = N[Pi, precision]
    5. a0 = 1; (*不能指定小数位 不然后面不能指定精度*)
    6. b0 = 1/Sqrt[2];
    7. t0 = 1/4;
    8. p0 = 1; (* 高斯-勒让德算法Gauss\[Dash]Legendre algorithm *)
    9. Do[
    10. a1 = (a0 + b0)/2;
    11. b1 = Sqrt[a0 *b0];
    12. t1 = t0 - p0 (a0 - a1)^2;
    13. p1 = 2 p0;
    14. a0 = a1;
    15. b0 = b1;
    16. t0 = t1;
    17. p0 = p1;
    18. rst = (a1 + b1)^2/(4 t1);
    19. Print["==>", n, " ", N[rst - pi1, 30]], {n, 1, 11, 1}]
    20. Print["==>计算的结果:(精度)", precision, "位 ", N[rst, precision]]

    ==>6  -2.3085807149343902668213207344*10^-171

    计算11次 结果到了5583位精度了。 普通电脑2秒的时间。

     计算历史

    日期

    计算者

    国籍

    正确位数

    详细纪录

    前20世纪

    未知

    古巴比伦王国

    1

    π=3.125

    前20世纪

    未知

    古印度

    1

    π=3.160493...

    前12世纪

    未知

    中国

    -

    π=3

    前6世纪中

    圣经列王记上7章23节

    -

    π=3

    前3世纪

    阿基米德

    古希腊

    3

    π=3.1418

    公元前20年

    维特鲁威

    古罗马

    1

    π=3.125

    公元前50年-公元前23年

    刘歆

    中国

    1

    π=3.1547

    130年

    张衡

    中国

    1

    π=3.162277…

    150年

    未知

    托勒密

    3

    π=3.141666…

    250年

    王蕃

    中国

    1

    π=3.155555…

    263年

    刘徽

    中国

    5

    π=3.14159

    480年

    祖冲之

    中国

    7

    π=3.1415926

    499年

    阿耶波多

    印度

    3

    π=3.1416

    598年

    婆罗摩笈多

    印度

    1

    π=3.162277…

    800年

    花拉子米

    乌兹别克

    3

    π=3.1416

    12世纪

    婆什迦罗第二

    印度

    4

    π=3.14156

    1220年

    斐波那契

    意大利

    3

    π=3.141818

    1400年

    Madhava

    10

    π=3.14159265359

    1424年

    Jamshid Masud Al Kashi

    16

    1573年

    Valentinus Otho

    6

    1593年

    弗朗索瓦·韦达

    法国 [10] 

    9

    1593年

    Adriaan van Roomen

    15

    1596年

    鲁道夫·范·科伊伦

    20

    1615年

    32

    1621年

    威理博·司乃耳,范·科伊伦的学生

    35

    1665年

    牛顿

    16

    1699年

    Abraham Sharp

    71

    1700年

    关孝和

    10

    1706年

    John Machin

    100

    1706年

    William Jones

    引入希腊字母π

    1719年

    De Lagny

    112

    得出127位

    前112位正确

    1723年

    建部贤弘

    41

    1730年

    Kamata

    25

    1734年

    莱昂哈德·欧拉

    引入希腊字母π并肯定其普及性

    1739年

    松永良弼

    50

    1761年

    约翰·海因里希·兰伯特

    证明π是无理数

    1775年

    欧拉

    指出π可能是超越数

    1794年

    Jurij Vega

    136

    得出140位小数

    前136位正确

    1794年

    阿德里安-马里·勒让德

    -

    1841年

    Rutherford

    152

    得出208位小数

    前152位正确

    1844年

    Zacharias Dase及Strassnitzky

    200

    1847年

    Thomas Clausen

    248

    1853年

    Lehmann

    261

    1853年

    William Rutherford

    440

    1855年

    Richter

    500

    1874年

    William Shanks

    527

    得出707位小数

    前527位正确

    1882年

    Lindemann

    证明π是超越数

    1946年

    D. F. Ferguson

    620

    1947年

    710

    1947年

    808

    1949年

    J. W. Wrench爵士和L. R. Smith

    2,037

    首次使用计算机

    1955年

    J. W. Wrench爵士及L. R. Smith

    3,089

    1957年

    G.E.Felton

    7,480

    1958年

    Francois Genuys

    10,000

    1958年

    G.E.Felton

    10,020

    1959年

    Francois Genuys

    16,167

    1961年

    IBM 7090

    晶体管计算机

    20,000

    1961年

    J. W. Wrench, Jr,及L. R. Smith

    100,000

    1966年

    250,000

    1967年

    500,000

    1974年

    1,000,000

    1981年

    金田康正

    2,000,000

    1982年

    4,000,000

    1983年

    8,000,000

    1983年

    16,000,000

    1985年

    Bill Gosper

    17,000,000

    1986年

    David H. Bailey

    29,000,000

    1986年

    金田康正

    33,000,000

    1986年

    67,000,000

    1987年

    134,000,000

    1988年

    201,000,000

    1989年

    楚诺维斯基兄弟

    480,000,000

    1989年

    535,000,000

    1989年

    金田康正

    536,000,000

    1989年

    楚诺维斯基兄弟

    1,011,000,000

    1989年

    金田康正

    1,073,000,000

    1992年

    2,180,000,000

    1994年

    楚诺维斯基兄弟

    4,044,000,000

    1995年

    金田康正和高桥大介

    4,294,960,000

    1995年

    6,000,000,000

    1996年

    楚诺维斯基兄弟

    8,000,000,000

    1997年

    金田康正和高桥大介

    51,500,000,000

    1999年

    68,700,000,000

    1999年

    206,000,000,000

    2002年

    金田康正的队伍

    1,241,100,000,000

    2009年

    高桥大介

    2,576,980,370,000

    2009年

    法布里斯·贝拉

    法国

    2,699,999,990,000

    2010年

    近藤茂

    5,000,000,000,000

    [11] 

    2011年

    IBM“蓝色基因”

    超级电脑

    π2的前60,000,000,000,000位二进制小数 [12] 

  • 相关阅读:
    猿创征文|vue中使用Axios最佳实践
    动机:关于如何获得和保持动力的科学指南
    使用react 写前端代码,使用javascript 写后端代码,前端向后端patch数据,如果后端要求integer型,前端要传什么型的数据才能成功修改后端的数据并返回给前端?
    农村污水处理站如何实现数据采集和远程监控?
    C++11的互斥量
    2023年天津财经大学珠江学院专升本管理学原理专业考试大纲
    ROS 第一节 运行小乌龟
    作为产品经理,有必要考PMP或者NPDP么?
    vue.js中使用三元运算符设置动态样式
    力扣每日一题:1769. 移动所有球到每个盒子所需的最小操作数【模拟题】
  • 原文地址:https://blog.csdn.net/eydj2008/article/details/126562059