Remove ads
来自维基百科,自由的百科全书
几个文明古国均在历史早期就计算出了较精确的的近似值以便于处理生产的需要。公元5世纪时,中国刘宋数学家祖冲之用几何方法将圆周率计算到小数点后7位数字。大约同一时间,印度的数学家也将圆周率计算到小数点后5位。历史上首个的精确无穷级数公式(即π的莱布尼茨公式)直到约1000年后才由印度数学家发现。[1][2]微积分的出现,很快地将的计算位数推至数百位,足以满足任何科学工程的计算需求。在20和21世纪,由于电脑技术的快速发展,借助电脑的计算使得的精度急速提高。截至2021年8月,的十进制精度已高达6.28×1013位。[3]当前人类计算的值的主要目的是为打破记录、测试超级计算机的计算能力和高精度乘法算法,因为几乎所有的科学研究对的精度要求都不会超过几百位。[4]:17[5]
经典近似值
其他进位制的近似值
和所有无理数一样,也无法表达成分数。但每个无理数包括,都能表达成一系列叫连分数的连续分数形式:
在这个连分数的任意一点截断化简,都能得到一个π的近似值;前四个近似值是:3,,,。这些数在历史上是最广为人知且广为使用的几个近似值。用以上方式得出的的近似值要比任何有相同或更小的整数分母的其他整数分数近似值更接近π。[6]由于是一个超越数,据超越数定义来说它不是代数数,又因此不可能是一个二次无理数;是故不能表示为循环连分数。尽管的简单连分数没有表现出任何其他明显规律,[8]数学家们发现了数个广义连分数能表示,例如:[9]
圆周率在远古时期已估算至前两位(“3”和“1”)。[谁?]
最早有记载的对圆周率估值在古埃及和古巴比伦出现,而它们两个文明古国估值都与圆周率的“精确值”相差不到百分之一,可说已是非常精准。
有不少埃及学家认为古埃及远至古王国时期时期,古埃及人已经会用作为计算圆周率的近似值[10][注 1],但这个说法受到了质疑。[12][13][14][15]
古埃及的莱因德数学纸草书,是古埃及第二中间期时代(约前1650年)由僧侣阿姆士在纸草上抄写的一部数学著作,鉴定撰写年份为公元前1650年,但抄自一份公元前1850年的文本。它载有用作计算圆面积的公式,该公式中圆周率近似值等于,约等于3.1605。[4]:167
公元前9世纪的《百道梵书》中的天文学运算把,约等于3.139,精确到99.91%,用作圆周率估值[16]。
而公元前6世纪的仪轨经当时采用的值是,约等于3.0883265。[17]
而某些公元前150年前的其他印度文献把圆周率视为(约等于3.1622)[4]:169。
第一个有纪录、严谨计算π数值的算法是透过正多边形的几何算法,是由希腊数学家阿基米德在公元前250年做的。[4]:170
这个算法使用了有一千年之久,因而有时π亦称阿基米德常量。[4]:175、205
阿基米德的算法是在计算圆的外切正六边形及内接正六边形的边长,以此计算的上限及下限,之后再将六边形变成十二边形,继续计算边长,一直计算到正96边形为止。他根据多边形的边长证明,也就是。[18]
阿基米德得到的上限也造成一个常见误解,认为就等于[4]:171。
希腊罗马的科学家克劳狄乌斯·托勒密在《天文学大成》一书中提到π的数值是3.1416,可能来自阿基米德,也可能来自阿波罗尼奥斯。[4]:176[19]
数学家在1630年利用多边形的方式计算π到第39位小数,一直到1699年,其他数学家才利用无穷级数的方式打破其纪录,计算到第71位小数[20]。
在中国历史上,的数值有3[21]、3.1547(公元前一世纪)、(公元前100年,数值约3.1623)及(第三世纪,数值约3.1556)[4]:176–177。
克劳狄乌斯·托勒密,也计算了圆周率近似值为,也即是。377⁄120
第一个已知的精确到小数点后三位的近似值正是托勒密做的。[24]
这个正可用两个六十进制数字表示。
王蕃通晓天文数学。撰有《浑天图记》、《浑天象注》。曾根据浑天说和长期的天象观察,精心制作浑天仪。
他计算了圆周率近似值为,也即是。
大约在公元265年,魏国的数学家刘徽创立了割圆术,用3,072边的正多边形计算出π的数值为3.1416。[25][4]:177
刘徽后来又发明了一个较快的算法,利用边数差两倍的正多边形,其面积的差值会形成等比数列,其公比为的原理,配合96边形算出的数值为3.14。[25]
何承天亦对圆周率进行研究,他创立了调日法,计算出圆周率近似值为111035/35329,也即约等于3.1429,准确至小数点后2位[26]。
据《隋书·律历志》[27]记载,祖冲之以“以直径一亿为一丈,圆周盈数三丈一尺四寸一分五厘九毫二秒七忽,朒数三丈一尺四寸一分五厘九毫二秒六忽,正数在盈朒二限之间。密率,圆径一百一十三,圆周三百五十五。约率,圆径七,周二十二。”,以此为直径求圆周率,求得盈数(即过剩的近似值)为;肭数(即不足的近似值)为,圆周率的真值介于盈肭两数之间。
《隋书》没有具体说明祖冲之是用什么方法计算出盈肭两数的。一般认为,祖冲之采用的是刘徽割圆术分割到24576边形,又用刘徽圆周率不等式得祖冲之著名的圆周率不等式: 。
祖冲之的这一结果精确到小数点后第7位,直到一千多年后才由15世纪的阿拉伯数学家阿尔·卡西以17位有效数字打破此记录[28]。
按照当时计算使用分数的习惯,祖冲之还采用了两个分数值的圆周率:“约率”(或称之为“疏率”[注 2])以及“密率”。在分母<16600的所有整分数中,密率的比值最接近圆周率[注 3]。祖冲之可能利用何承天的调日法求得圆周率的约率和密率[30]。数学家华罗庚曾认为密率的求得,说明祖冲之可能已经掌握了连分数的概念。
日本数学家三上义夫说,“约率,无非是几百年前希腊数学家阿基米德已经得到的数值,但是 这个分数,却是翻遍古希腊,古印度和阿拉伯的数学文献都找不到的分数,希腊人肯定不知道它;在欧洲直到1586年才由荷兰人安托尼斯宗(Adriaan Anthoniszoon)求出了这个比值。因此,中国人掌握这个非凡的圆周率分数比欧洲早出整整一千年之久”。为纪念这位伟大的中国古代数学家,三上义夫要求把称为“祖率”[31]。
祖冲之在公元480年利用割圆术计算12,288形的边长,得到的值在3.1415926和3.1415927之间。在之后的八百年内,这都是准确度最高的π估计值。[4]:178为纪念祖冲之对圆周率发展的贡献,日本数学家三上义夫将这一推算值命名为“祖冲之圆周率”,简称“祖率”。[32]
计算出出,也即约等于3.1622777。
波斯天文学家卡西在1424年利用3×228边的多边形,计算到六十进制的第9位小数,相当十进制的第16位小数。[33][34]这一突破成为当时的纪录,延续了约180年。[35]
荷兰数学家鲁道夫·范·科伊伦在1596年计算到第20位小数,他之后又计算到第35位小数,因此在二十世纪初之前,圆周率在德国会称为鲁道夫数。[4]:182–183
奥地利天文学家克里斯托夫·格林伯格在1630年用1040边形计算到第38位小数[36],至今这仍是利用多边形算法可以达到最准确的结果[4]:183。
16世纪及17世纪时,的计算开始改用无穷级数的计算方式。无穷级数是一组无穷数列的和[4]:185–191。
无穷级数让数学家可以计算出比阿基米德以及其他用几何方式计算的数学家更准确的结果。[4]:185–191
虽然詹姆斯·格雷果里及戈特弗里德·莱布尼茨等欧洲数学家利用无穷数列计算π而使得该方法为大家所知,但这种方法最早是由印度科学家在大约1400到1500年之间发现的。[4]:185-186[37]第一个记载的用无穷级数计算π的人是约公元1500年左右时,印度天文学家尼拉卡莎·萨默亚士在他的著作《系统汇编》中用梵语诗所记录。[38]当时没有这个数列对应的证明,而证明出现在另一本较晚的印度作品《基本原理》,年代约在公元1530年。尼拉卡莎将该数列归功于更早期的印度数学家桑加马格拉马的马德哈瓦( 1350 – 1425)。[38]有许多相关的无穷级数,包括有关、及的,现在称为马德哈瓦数列或π的莱布尼茨公式[38]。玛达瓦在1400年用无穷级数计算π到第11位小数,但在1430年一位波斯数学家卡西利用多边形算法否定了他算的的结果[39]。
欧洲第一个发现的无穷项圆周率公式是无穷乘积(和一般用来计算π的无穷级数不同),由法国科学家弗朗索瓦·韦达在1593年发现[4]:187[41]:
约翰·沃利斯在1655年发现了沃利斯乘积,是欧洲第二个发现的无穷项圆周率公式[4]:187:
微积分学是由英国科学家艾萨克·牛顿及德国数学家戈特弗里德·莱布尼茨在1660年代发明,因此也出现许多计算π的无穷级数。牛顿自己就利用反正弦()数列在1655年或1666年将π近似到第15位小数,后来写到“我很羞愧的告诉你我为了这个计算用了多少个数字,我当时没有做其他的事。”[40]
苏格兰数学家詹姆斯·格雷果里在1671年发现了马德哈瓦公式,莱布尼茨也在1674年发现:[4]:188–189[42]
这个公式即为格雷果里-莱布尼茨公式,在时数值为。[42]1699年时英国数学家亚伯拉罕·夏普用格雷果里-莱布尼茨公式,在时计算,计算到了的第71位小数,打破由多边形算法得到的第39位小数的记录。[4]:189格雷果里-莱布尼茨公式在时非常简单,但收敛到最终值的速度非常慢,因此现在不再会用此公式来计算。[4]:156
约翰·梅钦在1706年利用格雷果里-莱布尼茨级数产生了一个可以快速收敛的公式:[4]:192–193
梅钦用这个公式计算到的第100位小数[4]:72–74后来其他数学家也发展了一些类似公式,现在称为梅钦类公式,创下了许多计算位数的记录。[4]:72–74在进入电脑时代时,梅钦类公式仍然是个耳熟能详的可以计算的公式,而且在约250年的时间里,很多有关位数的记录都是梅钦类公式所得,比如在1946年时由达尼尔·弗格森(Daniel Ferguson)用这类公式计算到第620位小数,是在没有计算装置辅助下的最佳纪录。[4]:192–196, 205
1844年,计算天才扎卡里亚斯·达斯在德国数学家卡尔·弗里德里希·高斯的要求下以梅钦类公式心算了的200个小数码,并创下纪录。[4]:194-196英国数学家威廉·谢克斯花了15年的时间计算π到小数707位,不过中间在第528位小数时出错,因此后面的小数也都不正确。[4]:194–196
有些π的无穷级数收敛的比其他级数要快,数学家一般会选用收敛速度较快的级数,可以在较少的计算量下计算,且达到需要的准确度[43][4]:15–17, 70–72, 104, 156, 192–197, 201–202。以下是π的莱布尼茨公式:[4]:69–72
随着一项一项的值加入总和中,只要项次够多,总和最后会慢慢接近。不过此数列的收敛速度很慢,要到500,000项之后,才会精确到的第五小数[44]。
尼拉卡莎在15世纪发展了另一个的无穷级数,其收敛速度较格雷果里-莱布尼茨公式要快很多,该级数为:[45]
以下比较二个级数的收敛速率:
的无穷级数 | 第1项 | 前2项 | 前3项 | 前4项 | 前5项 | 收敛到: |
---|---|---|---|---|---|---|
4.0000 | 2.6666... | 3.4666... | 2.8952... | 3.3396... | π = 3.1415... | |
3.0000 | 3.1666... | 3.1333... | 3.1452... | 3.1396... |
计算前5项后,格雷果里-莱布尼茨级数的和跟的误差为0.2,而尼拉卡莎级数和的误差为0.002。尼拉卡莎级数收敛的快很多,因此也比较适合用来计算的数值。收敛更快的级数有梅钦类公式及楚德诺夫斯基算法,后者每计算一项就可以得到14位正确的小数值数[43]。
二十世纪中期电脑技术的发展、革新再次引发了计算π位数的热潮。美国数学家约翰·伦奇及李维·史密斯在1949年利用桌面型电脑计算到1,120位[4]:205。同年,乔治·韦斯纳(George Reitwiesner)及约翰·冯·诺伊曼带领的团队利用反三角函数(arctan)的无穷级数,通过ENIAC计算到了小数第2,037位,花了70小时的电脑工作时间[46]。这一纪录后来多次由其他透过arctan级数计算出的结果打破(1957年到7480位小数,1958年到第一万位数,1961年到第十万位小数),直到1973年,人们计算出了小数点后的第一百万位小数[4]:197。
1980年代的两项发明加速了的计算。第一项是人们发现了新的的迭代法去计算π的值,其计算速度比无穷级数会要快很多。另一项是人们发现了可以快速计算大数字乘积的乘法算法[4]:15–17。这类算法在现代π的计算上格外的重要,因为电脑大部分的工作时间都是在计算乘法[4]:131。这类算法包括Karatsuba算法、Toom–Cook乘法及以傅里叶变换为基础的乘法算法(傅里叶乘法)[4]:132, 140。
迭代算法最早是在1975年至1976年间分别由美国物理学家尤金·萨拉明及奥地利科学家理查·布兰特独立提出[4]:87。这两个算法没有依赖无穷级数来计算。迭代会重复一个特定的计算,将前一次的计算结果作为这一次的输入值,使得计算结果渐渐的趋近理想值。此方式的原始版本其实是在160年前由卡尔·弗里德里希·高斯提出,现在称为算术-几何平均数算法(AGM法)或高斯-勒让德算法[4]:87。因为萨拉明及布兰特都曾对此进行修改,因此这个算法也称为萨拉明-布兰特算法。
迭代算法因为收敛速度比无穷级数快很多,在1980年代以后广为使用。无穷级数随着项次的增加,一般来说正确的位数也会增加几位,但迭代算法每多一次计算,正确的位数会呈几何级数增长。例如萨拉明-布兰特算法每多一次计算,正确位数会是之前的二倍。1984年加拿大人乔纳森·波温及彼得·波温提出一个迭代算法,每多一次计算,正确位数会是之前的四倍,1987年时有另一个迭代算法,每多一次计算,正确位数会是之前的五倍[47]。日本数学家金田康正使用的算法在1955年及2002年之间创下了若干个纪录[48]。不过迭代算法的快速收敛也有其代价,因为这个算法需要的内存的大小明显的要比无穷级数要多[48]。
一般而言,值并不需要过于精确便能够满足大部分的数学运算的需求。按照约尔格·阿恩特(Jörg Arndt)及克里斯托夫·黑内尔(Christoph Haenel)的计算,39个数码已足够运算绝大多数的宇宙学的计算需求,因为这个精确度已能够将可观测宇宙圆周的精确度准确至一个原子大小[49]。 尽管如此,人们仍然是奋力地运算出小数点后的上千甚至上百万个数码[4]:17–19。这一部分是出于人类对打破记录的冲动,因为那些和有关的成就往往成为世界各地的新闻头条[50][51]。此外,这其中也有一些实际的好处,例如测试超级计算机、测试数值分析算法等(包括高精度乘法算法)。在纯粹数学的领域中,计算的位数也能让人们来评定π的随机性[4]:18。
现代计算的程序不仅仅局限于迭代算法。20世纪80与90年代,人们发现了一些可用来计算的新无穷级数,其收敛速度可与迭代算法媲美,而又有着复杂度、内存密集度更低的优势。[48]印度数学家斯里尼瓦瑟·拉马努金是这方面的先驱,他在1914年发表了许多与相关的公式,这些公式十分新颖,极为优雅而又颇具数学深度,收敛速度也非常快。[4]:103–104下式即为一例,其中用到了模方程:
这个无穷级数收敛速度远快于绝大多数反正切数列,包括梅钦公式。[4]:104第一位使用拉马努金公式计算并获取进展的是比尔·高斯珀,他在1985年算得了小数点后一千七百万位。[4]:104, 206拉马努金公式开创了现代数值近似算法的先河,此后波尔文兄弟和楚德诺夫斯基兄弟进一步发展了这类算法。[4]:110–111后者于1987年提出了楚德诺夫斯基公式,如下所示:
此公式每计算一项就能得到的约14位数值[52],因而用于突破圆周率的数码的计算。利用这个公式,楚德诺夫斯基兄弟于1989年算得小数点后10亿(109)位,法布里斯·贝拉于2009年算得2.7千亿(2.7×1012)位,亚历山大·易和近藤滋在2011年算得一万亿(1013)位。[4]:110–111, 206[53][54]类似的公式还有拉马努金-佐藤级数。
2006年,加拿大数学家西蒙·普劳夫利用PSLQ整数关系算法[55]按照以下模版生成了几个计算的新公式:
蒙特卡洛方法是以概率统计理论为指导的一类非常重要的数值计算方法,通过进行大量重复试验计算事件发生的频率,按照大数定律(即当试验次数充分大时,频率充分地接近于概率)可以求得的近似值[57]。 布丰投针问题就是其中一个应用的例子:当一枚长度为的针随机地往一个画满间距为的平行线的平面上抛掷次, 如果针与平行直线相交了次,那么当充分大时就可根据以下公式算出的近似值[58]:
另一个利用蒙特卡罗方法计算值的例子是随机地往内切四分之一圆的正方形内抛掷大量的点,落在四分之一圆内的点的数量与抛掷点的总量的比值会近似等于.[4]:39–40[59]
此外,还可以通过进行随机游走试验,并利用蒙特卡罗方法计算值,如抛掷一枚均匀的硬币次,并记录正面朝上的次数,所得结果中,正面朝上的次数服从二项分布且
因为硬币均匀,所以N次试验中每次试验结果相互独立。由此可定义一系列独立的随机变量,当抛掷结果为正面时否则为-1,且且取何值具有相同的概率(即,正面朝上和背面朝上的概率相同)。对随机变量求和可得
设k为“硬币正面朝上的次数”减去“硬币反面朝上的次数”,即可得到。对式子进行变换,得,因此
可以证明[60],
并且当变大时,的值会渐近于,因此当充分大时可根据以下公式算出的近似值:[61]
和其他计算值的方法相比,蒙特卡洛方法收敛速度很慢,而且无论进行多少次实验,都无从得知的估值已经精确到了第几位。因此,当追求速度或精度时,蒙特卡洛方法不适合用来估计。[4]:43[62]
1995年引入的两个算法开辟了研究的新途径。因为每计算出一位数字,该数就会像流过阀门的水一样不会再出现在后续的计算过程中,这种新进算法叫做阀门算法。[4]:77–84[63]这就与无穷级数及迭代算法形成对比——无穷级数和迭代算法自始至终的每一步计算都会涉及到之前所有步骤计算出的中间值。[4]:77–84
1995年,美国数学家斯坦·瓦格纳和斯坦利·拉比诺维茨(Stanley Rabinowitz)发明了一种简单的阀门算法[63][4]:77[64],其运算速度类似arctan算法,但速度比迭代算法要慢[4]:77。
贝利-波尔温-普劳夫公式(BBP)是另一个阀门算法,属于一种位数萃取算法。1995年,西蒙·普劳夫等人发现[4]:117, 126–128[65]
这个公式和其他的公式不同,可以在十六进制下计算的任意位数小数,而不用计算所有前面的小数码数[4]:117, 126–128。一个十六进制下的数码可计算得到特定一个二进制的数码;想要得到一个八进制数码的话,计算一、两个十六进制小数即可。目前也已发现一些这种算法的变体,不过人们还没有发现针对十进制、可以快速产生特定位数小数数字的位数萃取算法[66]。位数萃取算法的一个重要用途是用来确认声称是计算到小数码数的新记录:若有声称是新纪录的计算结果出现,先将十进制的数值变换到十六进制,再用贝利-波尔温-普劳夫公式,去确认最后的一些位数(用随机数决定),若这些位数都对,人们就能有一定把握认为此计算结果是对的[54]。
在1998年到2000年之间,分布式计算项目PiHex利用贝拉公式(贝利-波尔温-普劳夫公式的一种变体)计算的第1015个位,结果是0[4]:20[67]。在2010年9月,一名雅虎员工利用公司的Apache Hadoop应用程式在上千台电脑上计算在2×1015个数码开始,往后数的256个位,其第2×1015个位刚好也是0[68]。
值得注意的是,一些法律或历史文本欲“定义π”为有理数,尤其是1897年的“印第安纳州法案”,指明“直径和圆周比例为四分之五比4(暗示“π= 3.2”);和希伯来圣经中的一个段落,暗示“π= 3”。
在古代,人们使用60进制来计算。在60进制中,π能被准确至小数点后八位(十进制),而这数字是3:8:29:4460,即是:
(下一个60进制的数码为0)
除此之外,π的近似值还能以以下方式表示:
可以通过蒙特卡洛方法来计算圆周率。
以原点(0, 0)为圆心,画一个半径为的圆。然后以原点为中心,画一个边长为的正方形。圆和正方形内切。
圆的面积为,正方形的面积为。
于是有,。
通过生成0到r之间随机数作为一个点的横纵坐标,所有点均落在正方形内。
通过统计圆内的点数与总点数,。
当随时点的数目增加时,所得结果会越接近于圆周率。
但是该方法也有不足之处。具体可参考蒙特卡洛方法。
π的连分数表示式是[3; 7, 15, 1, 292, 1, 1, ...]。这连分数没有任何模式。π有很多用一条简单的规矩然制成的广义连分数
在1995年,西蒙·普劳夫发现了贝利-波尔温-普劳夫公式。这公式能在16进制中计算pi的任意数码,而不用计算之前的数码。[73]
在1996年,西蒙·普劳夫发明了一个公式,能在O(n3log(n)3)的时间之内计算出pi在任意进制的第n个数码[74]。在1997年,法布里斯·贝拉发明了另一个公式,把计算所需时间缩短至O(n2)。他又发明了在2进制计算pi的公式。[75]
在1961年,丹尼尔柄和他的团队在美国海军研究实验室计算了π的前100,000数码。
他和他的团队使用了两个不同的幂级数来计算π的数值。第一个幂级数中,任何错误都会造成一个比较高的数值;而另一个中,任何错误都会造成一个比较低的数值。所以如果两个幂级数计算出同样的数值,那个数值就肯定正确。美国海军研究实验室发放了π的前100,000数码。
但是以上的两个幂级数也要很长的时间才能计算出结果。相反地,约翰·梅钦的公式与反正切的泰勒级数一起使用则能很快地计算结果:
这类的公式被称为梅钦类公式。(注意,{ x,y} = {239, 132}是佩尔方程“x2-2y2 = -1”的其中一个解答。)
印度数学家斯里尼瓦瑟·拉马努金发现了π的很多其他表示方式。他与戈弗雷·哈罗德·哈代一起工作了很多年。
如果要计算π小数点后很多位,计算者通常会使用高斯-勒让德算法,波尔温公式,和1976年发明的萨拉明 - 布伦特公式。
π和1/π的小数点后首十万位能在古腾堡计划里查阅(参见#外部链接)。
在2002年12月,在东京大学进修的金田康正发放了π小数点后1,241,100,000,000位的值,创造了新的世界记录。他在2002年9月以六十四部日立的超级计算机计算出这值。这些电脑有1TB的存储器,而且能在每秒执行2兆次运算。上一个记录(21亿位)所使用的电脑每秒只能执行1兆次运算。金田康正使用了以下公式:
这些近似值由于有太多数码,所以没有实际用途,只是用来测试超级计算机。
在1997年,大卫·贝利(David H. Bailey)、皮特·波尔温和西蒙·普劳夫发布了一条新的公式来计算π的值:
这公式能在不知道前k - 1数码的值之下,在2进制或16进制中计算出π的第k个数码的值。贝利的网页(页面存档备份,存于互联网档案馆)包含了计算方法,而且把方法以几个编程语言记下。PiHex计算出π小数点后一兆数码的值。
法布里斯·贝拉推出了贝利-波尔温-普劳夫公式的改良版——贝拉公式:
还有其他计算π的值的公式:
拉马努金的公式收敛的速度异常地快,这公式后来在2000年演变成最快的公式(楚德诺夫斯基算法):
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.