考拉茲演算法
① 現代計算機是如何計算圓周率的
pi = 0.0
N = 100
for i in range(N):
pi += (1/pow(16,i) * ( 4/(8*i +1) -2/(8*i+4)-1/(8*i+5) -1/(8*i +6) ) )
print('圓周率為{:.10f}'.format(pi))
請把以上代碼拷進python語言開發環境里運行,結果如下(下圖是使用python開發環境Spyder運行上述代碼的結果):圓周率為3.1415926536.
(1)考拉茲演算法擴展閱讀
圓周率的研究過程:
1989年美國哥倫比亞大學研究人員用克雷-2型(Cray-2)和IBM-3090/VF型巨型電子計算機計算出π值小數點後4.8億位數,後又繼續算到小數點後10.1億位數。2010年1月7日——法國工程師法布里斯·貝拉將圓周率算到小數點後27000億位。
2010年8月30日——日本計算機奇才近藤茂利用家用計算機和雲計算相結合,計算出圓周率到小數點後5萬億位。
2011年10月16日,日本長野縣飯田市公司職員近藤茂利用家中電腦將圓周率計算到小數點後10萬億位,刷新了2010年8月由他自己創下的5萬億位吉尼斯世界紀錄。56歲的近藤茂使用的是自己組裝的計算機,從10月起開始計算,花費約一年時間刷新了紀錄。
② 我想要JPEG2000編碼基本原理及其應用的有關文獻,請問那裡可以找到謝謝
JPEG2000圖像壓縮標准及其關鍵演算法
周 寧 湯曉軍 徐維朴
(西安交通大學人工智慧與機器人研究所西安710049)
摘 要:JPEG2000是為適應不斷發展的圖像壓縮應用而出現的新的靜止圖像壓縮標准。闡述了JPEG2000圖像編碼系統的實現過程, 對其中採用的基本演算法和關鍵技術進行了描述,介紹了這一新標準的特點及應用場合,並對其性能進行了分析。�
關鍵詞:JPEG2000; 圖像壓縮;離散小波變換; 速率控制;感興趣區域��
1 引言�
隨著多媒體應用領域的快速增長和網路的不斷發展,傳統的JPEG壓縮技術已無法滿足人們對數字化多媒體圖像資料的要求,一種功能更強大、效率更卓越的靜止圖像壓縮標准被提到制定日程上,這就是JPEG2000。�
JPEG(Joint Photographic Experts Group)是在國際標准化組織(ISO)領導之下制定靜態圖像壓縮標準的委員會,第一套國際靜態圖像壓縮標准ISO 10918-1(JPEG)就是該委員會制定的。由於JPEG優良的品質,使他在短短幾年內獲得了極大的成功,被廣泛應用於互聯網和數碼相機領域,網站上80%的圖像都採用了JPEG壓縮標准。然而,目前的JPEG靜止圖像壓縮標准,具有中端和高端比特速率上的良好的速率畸變特性,但在低比特率范圍內,將會出現很明顯的方塊效應,其質量變得不可接受。JPEG不能在單一碼流中提供有損和無損壓縮,並且不能支持大於64×64 K的圖像壓縮。同時,盡管當前的JPEG標准具有重新啟動間隔的規定,但當碰到比特差錯時圖像質量將受到嚴重的損壞。�
針對這些問題,自1997年3月起,JPEG圖像壓縮標准委員會開始著手制定新一代的圖像壓縮標准以解決上述問題。2000年3月的東京會議,確定了彩色靜態圖像的新一代編碼方式JPEG2000圖像壓縮標準的編碼演算法。�
JPEG2000系統分為下列7個部分:�
①JPEG2000圖像編碼系統;�
②擴充(給①的核心定義添加更多的特徵和完善度);�
③運動JPEG2000;�
④一致性;�
⑤參考軟體(目前包含Java和C實現);�
⑥復合圖像文件格式(用於文件掃描和傳真應用程序);�
⑦對①的最小支持(技術報告)。�
①為完全被認可的ISO標准,定義了核心壓縮技術和最小文件格式,②~⑥定義壓縮和文件格式的擴充。其中,①已經制定完成,其餘部分還在制定過程中。本文所討論的JPEG2000標准就是基於第1部分的。
2 JPEG2000系統的特點�
JPEG2000以其特有的優點彌補了現行JPEG標準的不足。離散小波變換演算法中,圖像可以轉換成一系列可更加有效存儲像素模塊的子帶,因此,JPEG2000格式的圖像壓縮比可在現在的JPEG基礎上再提高10%~30%,而且壓縮後的圖像顯得更加細膩平滑。也就是說,在網上觀看採用JPEG2000壓縮的圖像時,不僅下載速率比採用JPEG格式的快近30%,而且品質也將更好。對於目前的JPEG標准,在同一個壓縮碼流中不能同時提供有損和無損壓縮,而在JPEG2000系統中,通過選擇參數, 能夠對圖像進行有損和無損壓縮,可滿足圖像質量要求很高的醫學圖像、圖像庫等方面的處理需要。現在網路上的JPEG圖像下載時是按"塊"傳輸的,因此只能逐行地顯示,而採用JPEG2000格式的圖像支持漸進傳輸(Progressive Transmission),這就允許圖像按照所需的解析度或像素精度進行重構,用戶根據需要,對圖像傳輸進行控制,在獲得所需的圖像解析度或質量要求後,便可終止解碼,而不必接收整個圖像的壓縮碼流。由於JPEG2000採用小波技術,利用其局部分辨特性,在不解壓的情況下,可隨機獲取某些感興趣的圖像區域(ROI)的壓縮碼流,對壓縮的圖像數據進行傳輸、濾波等操作。�
3 JPEG2000圖像編解碼系統�
本節主要介紹JPEG2000圖像編解碼系統。其編碼器和解碼器的框圖如圖1所示。�
在編碼器中,首先對源圖像進行前期預處理,對處理的結果進行離散小波變換,得到小波系數。然後對小波系數進行量化和熵編碼,最後組成標準的輸出碼流(位流)。解碼器是編碼器的反過程,首先對碼流進行解包和熵解碼,然後是反向量化和離散小波反變換,對反變換的結果進行後期處理合成,就得到重構的圖像數據。盡管JPEG2000編解碼過程與JPEG類似,但是對於每一步的具體實現兩者卻有非常大的差異。編碼過程的一般步驟如下:�
(1) 將有多個顏色分量組成的圖像分解成單一顏色分量的圖像。分量之間存在一定的相關性,通過分解相關的分量變換,可減少數據間的冗餘度,提高壓縮效率;�
(2) 分量圖像被分解成大小統一的矩形片——圖像片。圖像片是進行變換和編解碼的基本單元;�
(3) 每一個圖像片進行小波變換。產生多級系數圖像。這些不同級數的系數圖像可以重構出不同解析度的圖像;�
(4) 多級分解的結果是由小波系數組成的多個子帶。他們表示圖像片中局部區域(而不是整幅圖像)的頻率特性;�
(5) 對系數子帶進行量化,並且組成矩形數組的"碼塊";�
(6) 對一個碼塊中的系數位平面(也就是一個碼塊中整個系數中具有同樣權值的那些位)進行熵編碼;�
(7) 相對於圖像的背景區域,可以對感興趣區域進行更高質量的編碼;�
(8) 通過在位流中加入掩碼來增加抗干擾性;�
(9) 在每一個碼流的最前部都有一個頭結構,他描述的是源圖像的屬性,各種分解情況和編碼風格。這個頭結構可以用來進行定位、抽取、解碼和重構圖像,得到的圖像可以具有所期望的解析度、重現精度、感興趣的區域或是其他特性。�
編碼過程主要分為以下幾個過程:預處理、核心處理和位流組織。預處理部分包括對圖像分片、直流電平(DC)位移和分量變換。核心處理部分由離散小波變換、量化和熵編碼組成。位流組織部分則包括區域劃分、碼塊、層和包的組織。�
3.1 預處理�
(1)圖像分片�
分片指的是把源圖像分割成相互不重疊的矩形塊——圖像片,每一個圖像片作為一個獨立的圖像進行壓縮編碼。編碼中的所有操作都是針對圖像片進行的。圖像片是進行變換和編解碼的基本單元。圖像的分片降低了對存儲空間的要求,並且由於他們重構時也是獨立進行的,所以可以用來對圖像的特定區域而不是整幅圖像進行解碼。當然,圖像分片會影響圖像質量。比較小的圖像片會比大圖像片產生更大的失真。圖像分片在低比特率表示圖像的時候所造成的圖像失真會更加嚴重。
(2)DC電平位移�
在對每一圖像片進行正向離散小波變換之前,都要進行直流電平位移。目的是在解碼時,能夠從有符號的數值中正確恢復重構的無符號樣本值。直流電平位移是對僅有無符號數組成的圖像片的像素進行的。電平位移並不影響圖像的質量。在解碼端,在離散小波反變換之後,對重構的圖像進行反向直流電平位移。�
(3)分量變換�
JPEG2000支持多分量圖像。不同的分量不需要有相同的比特深度,也不需要都是無符號或有符號數。對於可恢復(無損)系統,唯一的要求就是每一個輸出分量圖像的比特深度必須跟相應輸入分量圖像的比特深度保持一致。�
3.2 核心處理�
(1)小波變換�
不同於傳統的DCT變換,小波變換具有對信號進行多解析度分析和反映信號局部特徵的特點。通過對圖像片進行離散小波變換,得到小波系數圖像,而分解的級數視具體情況而定。小波系數圖像由幾種子帶系數圖像組成。這些子帶系數圖像描述的是圖像片水平和垂直方向的空間頻率特性。不同子帶的小波系數反映圖像片不同空間解析度的特性。通過多級小波分解,小波系數既能表示圖像片中局部區域的高頻信息(如圖像邊緣),也能表示圖像片中的低頻信息(如圖像背景)。這樣,即使在低比特律的情況下,我們也能保持較多的圖像細節(如邊緣)。另外,下一級分解得到的系數所表示圖像在水平和垂直方向的解析度只有上一級小波系數所表示的圖像的一半。所以,通過對系數圖像的不同級數進行解碼,就可以得到具有不同空間解析度(或清晰,或模糊)的圖像。�
小波變換因其具有的這種優點被JPEG2000標准所採用。在編碼系統中,對每個圖像片進行Mallat塔式小波分解。經過大量的測試,JPEG2000選用兩種小波濾波器:LeGall 5/3濾波器和Daubechies 9/7濾波器。前者可用於有損或無損圖像壓縮,後者只能用於有損壓縮。�
在JPEG2000標准中,小波濾波器可以有2種實現模式:基於卷積的和基於提升機制的。而具體實現時,對圖像邊緣都要進行周期對稱延伸,這樣可以防止濾波器對圖像邊緣操作時產生失真。另外,為了減小變換時所需空間的開銷,標准中還應用了基於行的小波變換技術。�
(2)量化�
由於人類視覺系統對圖像的解析度要求有一定的局限,通過適當的量化減小變換系數的精度,可在不影響圖像主觀質量的前提下,達到圖像壓縮的目的。量化的關鍵是根據變換後圖像的特徵、重構圖像質量要求等因素設計合理的量化步長。量化操作是有損的,會產生量化誤差。不過一種情況除外,那就是量化步長是1,並且小波系數都是整數,利用可恢復整數5/3拍小波濾波器進行小波變換得到的結果就符合這種情況。�
在JPEG2000標准中,對每一個子帶可以有不同的量化步長。但是在一個子帶中只有一個量化步長。量化以後,每一個小波系數有2部分來表示:符號和幅值。對量化後的小波系數進行編碼。對於無損壓縮,量化步長必須是1。�
(3)熵編碼�
圖像經過變換、量化後,在一定程度上減少了空域和頻域上的冗餘度,但是這些數據在統計意義上還存在一定的相關性,為此採用熵編碼來消除數據間的統計相關。將量化後的子帶系數劃分成小的矩形單元——碼塊(code block)。
如圖2所示,採用兩層編碼策略,首先使用基於上下文的算術編碼器,每個碼塊進行獨立的嵌入式碼塊編碼,得到碼塊的嵌入式壓縮位流。然後,根據率失真優化原則,採用PCRD(Post Compression Rate Distortion)優化演算法思想,將所有碼塊的壓縮位流適當截取,組織成具有不同質量級的壓縮位流層。每一層上的壓縮位流連同其前面的所有層的壓縮位流,可重構出一定質量的圖像。在分層組織壓縮位流時,須對每個碼塊在每一層上的貢獻信息進行編碼,即對碼塊位流在該層的截斷點信息等編碼。由於圖像採用小波變換,整個圖像壓縮碼流具有解析度可分級性,從而,壓縮碼流可同時具有質量上和解析度上的可分級性。由於對碼塊進行獨立編碼,因此,可根據需要,隨機獲取並解碼相應的碼塊壓縮位流,重構出所需的圖像區域。
①第一層編碼演算法�
與傳統的依次對每個系數進行算術熵編碼不同,JPEG2000編碼系統把碼塊中的量化系數組織成若干個位平面,從最高有效位平面(MSB)開始,依次對每個位平面上的小波系數位進行算術編碼。�
第一層編碼可以看作2部分:上下文的生成(CF)和算術編碼器(AE)。在上下文的生成中,以一定的順序掃描碼塊中的所有位。在碼塊的每個位平面上,從左上角系數開始,從左到右,從上到下進行掃描,並為每一位生成一個上下文。算術編碼器根據生成的上下文,對每一位進行編碼。
在量化後,小波系數被轉換為符號-振幅模式。在從MSB到LSB編碼時,當遇到第一個為1的比特時,這個像素被稱作是顯著的,否則,為不顯著的。所有比特的上下文都是由他們的鄰域通過以下的4種方法產生:�
零編碼(zero coding,ZC)用來編碼非顯著像素在當前的位平面中是否將變得顯著;�
遊程編碼(run-length coding, RLC)用來編碼位於同一列中的4個非顯著性像素,如果他們的鄰域都是非顯著的;�
符號編碼(sign coding, SC)當該位變得顯著後,編碼他的符號位;
幅度編碼(Magnitude Refinement, MR)用來編碼顯著位。�
每個位平面都在3個編碼通道中進行編碼。通道1是重要性傳播通道(Significance Propagation Pass),至少有一個重要性鄰域的像素,在此通道進行編碼,使用ZC和SC。通道2是幅度細化通道(Magnitude Refinement Pass),所有的重要位在此通道進行編碼,使用MR。通道3是清除通道(Cleanup Pass),所有沒有在上兩個通道中進行編碼的像素,在此通道中進行編碼,使用ZC,LRC和SC。位平面中的每一位在3個通道中進行檢查來確定是否應當被編碼。
由編碼通道得到的上下文和與其對應的數據一起,送至算術編碼器進行編碼。在這里,採用了自適應二進制算術編碼〔1〕,主要是考慮到計算的復雜度以及實現的方便性。在進行算術編碼後,對每一個碼塊,得到一個獨立的嵌入式碼塊壓縮位流。�
②第二層編碼演算法�
在第二層編碼演算法中,採用PCRD率失真優化演算法思想〔1,2〕,對所有碼塊的嵌入式壓縮位流進行適當的截取,分層組織,形成整個圖像的具有質量可分級的壓縮碼流。第二層編碼演算法也可以看作兩部分:速率控制和分層組織壓縮位流。速率控制是指通過一定的編解碼措施,獲得給定壓縮碼率下的最佳重構圖像質量。分層組織壓縮位流根據編碼參數所規定的分層層數以及每一層的編碼速率,估算每一層的率失真門限,然後根據每一層估計出的率失真門限,按照碼塊率失真演算法,找到每個碼塊嵌入式壓縮位流在該層上的截斷點,將截斷的碼塊壓縮位流進行打包,按照規定的格式存儲,形成圖像壓縮碼流。將碼流分層組織,每一層含有一定的質量信息,在前面層的基礎上改善圖像質量。這樣用戶可以根據自己的需要,控制圖像的傳輸,在取得滿意的圖像效果後,中止傳輸,在某種程度上緩解當前網路帶寬有限而圖像數據量大而造成的瓶頸問題。
3.3 位流組織�
為了適合圖像交換,更好地應用JPEG2000壓縮碼流的功能,JPEG2000標准規定了存放壓縮位流和解碼所需參數的格式,把壓縮碼流以包為單元進行組織,形成最終的碼流。
4 JPEG2000中的關鍵技術�
在這一節中,對JPEG2000中所使用的關鍵技術加以說明。�
4.1 離散小波變換�
JPEG2000與傳統JPEG最大的不同在於他放棄了JPEG所採用的以離散餘弦變換(DCT)為主的區塊編碼方式,轉而採用以小波變換(DWT)為主的多解析編碼方式。 �
餘弦變換是經典的譜分析工具,他考察的是整個時域過程的頻域特徵或整個頻域過程的時域特徵,因此對於平穩過程,他有很好的效果,但對於非平穩過程,他卻有諸多不足。在JPEG中,離散餘弦變換將圖像壓縮為8×8 的小塊,然後依次放入文件中,這種演算法靠丟棄頻率信息實現壓縮,因而圖像的壓縮率越高,頻率信息被丟棄的越多。在極端情況下,JPEG圖像只保留了反映圖像外貌的基本信息,精細的圖像細節都損失了。小波變換是現代譜分析工具,他既能考察局部時域過程的頻域特徵,又能考察局部頻域過程的時域特徵,因此即使對於非平穩過程,處理起來也得心應手。他能將圖像變換為一系列小波系數,這些系數可以被高效壓縮和存儲,此外,小波的粗略邊緣可以更好地表現圖像,因為他消除了DCT壓縮普遍具有的方塊效應。
4.2 速率控制演算法�
JPEG2000通過採用速率控制方法來計算碼流的理想截斷點,從而獲得給定壓縮碼率下的最佳重構圖像質量。速率控制使用了PCRD率失真優化演算法。率失真優化,即給定整個壓縮碼流的最大編碼速率,找出每個碼塊壓縮位流的適當截斷點,在滿足的條件下,使重構圖像失真最小。從而使得嵌入式碼塊編碼具有如下特點:生成的壓縮位流可根據需要,被截斷成不同長度的位流子集;將所有碼塊的截斷位流組織起來,可重構出一定質量的圖像。�
4.3 漸進傳輸特性�
現在網路上的JPEG圖像下載時是按"塊"傳輸的,因此只能逐行顯示,而採用JPEG2000格式的圖像支持漸進傳輸。JPEG2000中的漸進傳輸有2種,按照解析度的漸進傳輸和按照質量的漸進傳輸。按照質量的漸進傳輸就是先傳輸圖像輪廓數據,然後再逐步傳輸細節數據來不斷提高圖像質量,而按照解析度的漸進傳輸則先傳輸解析度較低的圖像,後一幅圖像在前一幅圖像的基礎上提高其解析度。圖像的漸進傳輸使得用戶不需要像以前那樣等圖像全部下載後才決定是否需要,有助於快速地瀏覽和選擇大量圖片,從而有效的解決了網路傳輸的瓶頸問題。�
4.4 感興趣區域壓縮�
JPEG2000一個極其重要的優點就是ROI(Region of Interest,感興趣區域)。用戶可以任意指定圖片上感興趣的區域,然後在壓縮時對這些區域指定壓縮質量,或在恢復時指定某些區域的解壓縮要求。這是因為子波在空間和頻率域上具有局域性,要完全恢復圖像中的某個局部,並不需要所有編碼都被精確保留,只要對應他的一部分編碼沒有誤差就可以了。在實際應用中,我們就可以對一幅圖像中感興趣的部分採用低壓縮比以獲取較好的圖像效果,而對其他部分採用高壓縮比以節省存儲空間。這樣就能在保證不丟失重要信息的同時又有效地壓縮了數據量,實現了真正的"互動式"壓縮。�
5 JPEG2000標準的應用�
隨著科技的發展,網路已經滲透到每個人的生活之中。然而,受到網路帶寬的限制,高質量的圖像由於數據量很大,在網路上的傳輸延遲很大。因此,對於使用PC機、筆記本、掌上電腦或PDA,通過Modem接入網際網路訪問圖像數據的用戶來說,允許根據需要選擇恰當的圖像解析度進行瀏覽和傳輸是非常必要的。�
在軍事偵察和氣象預報中,由衛星遙感得到的圖像必須通過遠距離無線信道傳輸,傳輸誤碼的出現不可避免。JPEG2000編碼器特有的碼流組織形式是輸出碼流具有有效抑制誤碼的能力。這樣,碼流通過無線衛星通訊信道發還給地面接收站後,地面接收站在解碼過程中可以利用JPEG2000內部的碼流組織形式來避免由於傳輸誤碼而造成的錯誤解碼。�
此外,在安全確認、身份認證及醫學領域,JPEG2000都有著其廣泛的應用。可以預測,在不久的將來,JPEG2000將在以下領域得到廣泛的應用:網際網路、移動和便攜設備、印刷、掃描(出版物預覽)、數碼相機、遙感、傳真(包括彩色傳真和網際網路傳真)、醫學應用、數字圖書館和電子商務等。
6 結論�
JPEG2000旨在創建一個新的圖像編碼系統,該壓縮編碼系統的率失真和主觀圖像質量優於現有的JPEG標准,能夠提供對圖像的低碼率的壓縮,並且對壓縮碼流可進行靈活的處理,如隨機獲取部分壓縮碼流、圖像的漸進傳輸、感興趣區域的實現以及壓縮碼流較強的容錯性能等,該標准將與現行JPEG標准兼容。JPEG2000圖像壓縮標准以其優秀的性能,必將在數碼相機、遙感、傳真、醫療以及電子商務等多個領域得到廣泛的應用,成為21世紀的主流靜態圖像壓縮標准。
參考文獻
〔1〕JPEG 2000 Image Coding ystem.JPEG 2000 Final Committee Draft Version 1.0, 2000,16(3)�
〔2〕Taubman D. High Performance Scable Image Compression with EBCOT.IEEE Trans� Image Processing,1994,3(9):572~578�
〔3〕張曉娣,等.新一代的靜止圖像壓縮標准 JPEG2000.電信科學,2001(5)�
〔4〕李冬梅.發展中的靜止圖像壓縮標准JPEG2000.電視技術,2001(6)�
〔5〕王瑞軒.面向JPEG2000的二維DWT的VLSI設計與模擬,2002
wisher_lxy | 已被瀏覽119次 0 評論 | 引用(0) | 加入博採中心
最新發表
再別康橋
做人最重要的是積極!
無言
xml四種解析器及性能比較(轉載)
JPEG2000綜述 [轉]
為什麼人總是這么復雜?
從來不懂得放棄是種美麗!
我要一個人自由自在!
我要一個人自由自在!
生命如此之輕
最新回復
嘿嘿,復雜就復雜吧
Powered by BlogChina.com
③ 高分懸賞
圓的周長與直徑之比是一個常數,人們稱之為圓周率。通常用希臘字母「π」來表示。1706年,英國人瓊斯首次創用π代表圓周率。他的符號並未立刻被採用,以後,歐拉予以提倡,才漸漸推廣開來。現在π已成為圓周率的專用符號,π的研究,在一定程度上反映這個地區或時代的數學水平,它的歷史是饒有趣味的。
在古代,實際上長期使用 π=3這個數值,巴比倫、印度、中國都是如此。到公元前2世紀,中國的《周髀算經》里已有周三徑一的記載。東漢的數學家又將值改為根號10(約為3.16)。真正使圓周率計算建立在科學的基礎上,首先應歸功於阿基米德。他專門寫了一篇論文《圓的度量》,用幾何方法證明了圓周率與圓直徑之比小於三又七分之一而大於三又七十一分之十。這是第一次在科學中創用上、下界來確定近似值。第一次用正確方法計算π值的,是魏晉時期的劉徽,在公元263年,他創用了用圓的內接正多邊形的面積來逼近圓面積的方法,算得π值為3.14。我國稱這種方法為「割圓術」。直到1200年後,西方人才找到了類似的方法。後人為紀念劉徽的貢獻,將3.14稱為徽率。
公元460年,南朝的祖沖之利用劉徽的割圓術,把π值算到小點後第七位3.1415926,這個具有七位小數的圓周率在當時是世界首次。祖沖之還找到了兩個分數:22/7和113/355,用分數來代替π,極大地簡化了計算,這種思想比西方也早一千多年。
祖沖之的圓周率,保持了一千多年的世界記錄。終於在1596年,由荷蘭數學家盧道夫打破了。他把π值推到小數點後第15位小數,最後推到第35位。為了紀念他這項成就,人們在他1610年去世後的墓碑上,刻上:3.這個數,從此也把它稱為「盧道夫數」。
之後,西方數學家計算 的工作,有了飛速的進展。1948年1月,費格森與雷思奇合作,算出808位小數的π值。計算機問世後,π的人工計算宣告結束。20世紀50年代,人們藉助計算機算得了10萬位小數的π值,70年代又突破這個記錄,算到了150萬位。到90年代初,用新的計算方法,算到的值已到了4.8億位。π的計算經歷了幾千年的歷史,它的每一次重大進步,都標志著技術和演算法的革新。
圓周率π的計算歷程
圓周率是一個極其馳名的數。從有文字記載的歷史開始,這個數就引進了外行人和學者們的興趣。作為一個非常重要的常數,圓周率最早是出於解決有關圓的計算問題。僅憑這一點,求出它的盡量准確的近似值,就是一個極其迫切的問題了。事實也是如此,幾千年來作為數學家們的奮斗目標,古今中外一代一代的數學家為此獻出了自己的智慧和勞動。回顧歷史,人類對 π 的認識過程,反映了數學和計算技術發展情形的一個側面。 π 的研究,在一定程度上反映這個地區或時代的數學水平。德國數學史家康托說:"歷史上一個國家所算得的圓周率的准確程度,可以作為衡量這個國家當時數學發展水平的指標。"直到19世紀初,求圓周率的值應該說是數學中的頭號難題。為求得圓周率的值,人類走過了漫長而曲折的道路,它的歷史是饒有趣味的。我們可以將這一計算歷程分為幾個階段。
實驗時期
通過實驗對 π 值進行估算,這是計算 π 的的第一階段。這種對 π 值的估算基本上都是以觀察或實驗為根據,是基於對一個圓的周長和直徑的實際測量而得出的。在古代世界,實際上長期使用 π =3這個數值。最早見於文字記載的有基督教《聖經》中的章節,其上取圓周率為3。這一段描述的事大約發生在公元前950年前後。其他如巴比倫、印度、中國等也長期使用3這個粗略而簡單實用的數值。在我國劉徽之前"圓徑一而周三"曾廣泛流傳。我國第一部《周髀算經》中,就記載有圓"周三徑一"這一結論。在我國,木工師傅有兩句從古流傳下來的口訣:叫做:"周三徑一,方五斜七",意思是說,直徑為1的圓,周長大約是3,邊長為5的正方形,對角線之長約為7。這正反映了早期人們對圓周率 π 和√2 這兩個無理數的粗略估計。東漢時期官方還明文規定圓周率取3為計算面積的標准。後人稱之為"古率"。
早期的人們還使用了其它的粗糙方法。如古埃及、古希臘人曾用穀粒擺在圓形上,以數粒數與方形對比的方法取得數值。或用勻重木板鋸成圓形和方形以秤量對比取值……由此,得到圓周率的稍好些的值。如古埃及人應用了約四千年的 4 (8/9)2 = 3.1605。在印度,公元前六世紀,曾取 π= √10 = 3.162。在我國東、西漢之交,新朝王莽令劉歆製造量的容器――律嘉量斛。劉歆在製造標准容器的過程中就需要用到圓周率的值。為此,他大約也是通過做實驗,得到一些關於圓周率的並不劃一的近似值。現在根據銘文推算,其計算值分別取為3.1547,3.1992,3.1498,3.2031比徑一周三的古率已有所進步。人類的這種探索的結果,當主要估計圓田面積時,對生產沒有太大影響,但以此來製造器皿或其它計算就不合適了。
幾何法時期
憑直觀推測或實物度量,來計算 π 值的實驗方法所得到的結果是相當粗略的。
真正使圓周率計算建立在科學的基礎上,首先應歸功於阿基米德。他是科學地研究這一常數的第一個人,是他首先提出了一種能夠藉助數學過程而不是通過測量的、能夠把 π 的值精確到任意精度的方法。由此,開創了圓周率計算的第二階段。
圓周長大於內接正四邊形而小於外切正四邊形,因此 2√2 < π < 4 。
當然,這是一個差勁透頂的例子。據說阿基米德用到了正96邊形才算出他的值域。
阿基米德求圓周率的更精確近似值的方法,體現在他的一篇論文《圓的測定》之中。在這一書中,阿基米德第一次創用上、下界來確定 π 的近似值,他用幾何方法證明了"圓周長與圓直徑之比小於 3+(1/7) 而大於 3 + (10/71) ",他還提供了誤差的估計。重要的是,這種方法從理論上而言,能夠求得圓周率的更准確的值。到公元150年左右,希臘天文學家托勒密得出 π =3.1416,取得了自阿基米德以來的巨大進步。
割圓術。不斷地利用勾股定理,來計算正N邊形的邊長。
在我國,首先是由數學家劉徽得出較精確的圓周率。公元263年前後,劉徽提出著名的割圓術,得出 π =3.14,通常稱為"徽率",他指出這是不足近似值。雖然他提出割圓術的時間比阿基米德晚一些,但其方法確有著較阿基米德方法更美妙之處。割圓術僅用內接正多邊形就確定出了圓周率的上、下界,比阿基米德用內接同時又用外切正多邊形簡捷得多。另外,有人認為在割圓術中劉徽提供了一種絕妙的精加工辦法,以至於他將割到192邊形的幾個粗糙的近似值通過簡單的加權平均,竟然獲得具有4位有效數字的圓周率 π =3927/1250 =3.1416。而這一結果,正如劉徽本人指出的,如果通過割圓計算得出這個結果,需要割到3072邊形。這種精加工方法的效果是奇妙的。這一神奇的精加工技術是割圓術中最為精彩的部分,令人遺憾的是,由於人們對它缺乏理解而被長期埋沒了。
恐怕大家更加熟悉的是祖沖之所做出的貢獻吧。對此,《隋書·律歷志》有如下記載:"宋末,南徐州從事祖沖之更開密法。以圓徑一億為丈,圓周盈數三丈一尺四寸一分五厘九毫二秒七忽,朒數三丈一尺四寸一分五厘九毫二秒六忽,正數在盈朒二限之間。密率:圓徑一百一十三,圓周三百五十五。約率,圓徑七,周二十二。"
這一記錄指出,祖沖之關於圓周率的兩大貢獻。其一是求得圓周率
3.1415926 < π < 3.1415927
其二是,得到 π 的兩個近似分數即:約率為22/7;密率為355/113。
他算出的 π 的8位可靠數字,不但在當時是最精密的圓周率,而且保持世界記錄九百多年。以致於有數學史家提議將這一結果命名為"祖率"。
這一結果是如何獲得的呢?追根溯源,正是基於對劉徽割圓術的繼承與發展,祖沖之才能得到這一非凡的成果。因而當我們稱頌祖沖之的功績時,不要忘記他的成就的取得是因為他站在數學偉人劉徽的肩膀上的緣故。後人曾推算若要單純地通過計算圓內接多邊形邊長的話,得到這一結果,需要算到圓內接正12288邊形,才能得到這樣精確度的值。祖沖之是否還使用了其它的巧妙辦法來簡化計算呢?這已經不得而知,因為記載其研究成果的著作《綴術》早已失傳了。這在中國數學發展史上是一件極令人痛惜的事。
中國發行的祖沖之紀念郵票
祖沖之的這一研究成果享有世界聲譽:巴黎"發現宮"科學博物館的牆壁上著文介紹了祖沖之求得的圓周率,莫斯科大學禮堂的走廊上鑲嵌有祖沖之的大理石塑像,月球上有以祖沖之命名的環形山……
對於祖沖之的關於圓周率的第二點貢獻,即他選用兩個簡單的分數尤其是用密率來近似地表示 π 這一點,通常人們不會太注意。然而,實際上,後者在數學上有更重要的意義。
密率與 π 的近似程度很好,但形式上卻很簡單,並且很優美,只用到了數字1、3、5。數學史家梁宗巨教授驗證出:分母小於16604的一切分數中,沒有比密率更接近 π 的分數。在國外,祖沖之死後一千多年,西方人才獲得這一結果。
可見,密率的提出是一件很不簡單的事情。人們自然要追究他是採用什麼辦法得到這一結果的呢?他是用什麼辦法把圓周率從小數表示的近似值化為近似分數的呢?這一問題歷來為數學史家所關注。由於文獻的失傳,祖沖之的求法已不為人知。後人對此進行了各種猜測。
讓我們先看看國外歷史上的工作,希望能夠提供出一些信息。
1573年,德國人奧托得出這一結果。他是用阿基米德成果22/7與托勒密的結果377/120用類似於加成法"合成"的:(377-22) / (120-7) = 355/113。
1585年,荷蘭人安托尼茲用阿基米德的方法先求得:333/106 < π < 377/120,用兩者作為 π 的母近似值,分子、分母各取平均,通過加成法獲得結果:3 ((15+17)/(106+120) = 355/113。
兩個雖都得出了祖沖之密率,但使用方法都為偶合,無理由可言。
在日本,十七世紀關孝和重要著作《括要演算法》卷四中求圓周率時創立零約術,其實質就是用加成法來求近似分數的方法。他以3、4作為母近似值,連續加成六次得到祖沖之約率,加成一百十二次得到密率。其學生對這種按部就班的笨辦法作了改進,提出從相鄰的不足、過剩近似值就近加成的辦法,(實際上就是我們前面已經提到的加成法)這樣從3、4出發,六次加成到約率,第七次出現25/8,就近與其緊鄰的22/7加成,得47/15,依次類推,只要加成23次就得到密率。
錢宗琮先生在《中國算學史》(1931年)中提出祖沖之採用了我們前面提到的由何承天首創的"調日法"或稱加權加成法。他設想了祖沖之求密率的過程:以徽率157/50,約率22/7為母近似值,並計算加成權數x=9,於是 (157 + 22×,9) / (50+7×9) = 355/113,一舉得到密率。錢先生說:"沖之在承天後,用其術以造密率,亦意中事耳。"
另一種推測是:使用連分數法。
由於求二自然數的最大公約數的更相減損術遠在《九章算術》成書時代已流行,所以藉助這一工具求近似分數應該是比較自然的。於是有人提出祖沖之可能是在求得盈 二數之後,再使用這個工具,將3.14159265表示成連分數,得到其漸近分數:3,22/7,333/106,355/113,102573/32650…
最後,取精確度很高但分子分母都較小的355/113作為圓周率的近似值。至於上面圓周率漸近分數的具體求法,這里略掉了。你不妨利用我們前面介紹的方法自己求求看。英國李約瑟博士持這一觀點。他在《中國科學技術史》卷三第19章幾何編中論祖沖之的密率說:"密率的分數是一個連分數漸近數,因此是一個非凡的成就。"
我國再回過頭來看一下國外所取得的成果。
1150年,印度數學家婆什迦羅第二計算出 π= 3927/1250 = 3.1416。1424年,中亞細亞地區的天文學家、數學家卡西著《圓周論》,計算了3×228=805,306,368邊內接與外切正多邊形的周長,求出 π 值,他的結果是:
π=3.14159265358979325
有十七位準確數字。這是國外第一次打破祖沖之的記錄。
16世紀的法國數學家韋達利用阿基米德的方法計算 π 近似值,用 6×216正邊形,推算出精確到9位小數的 π 值。他所採用的仍然是阿基米德的方法,但韋達卻擁有比阿基米德更先進的工具:十進位置制。17世紀初,德國人魯道夫用了幾乎一生的時間鑽研這個問題。他也將新的十進制與早的阿基米德方法結合起來,但他不是從正六邊形開始並將其邊數翻番的,他是從正方形開始的,一直推導出了有262條邊的正多邊形,約4,610,000,000,000,000,000邊形!這樣,算出小數35位。為了記念他的這一非凡成果,在德國圓周率 π 被稱為"魯道夫數"。但是,用幾何方法求其值,計算量很大,這樣算下去,窮數學家一生也改進不了多少。到魯道夫可以說已經登峰造極,古典方法已引導數學家們走得很遠,再向前推進,必須在方法上有所突破。
17世紀出現了數學分析,這銳利的工具使得許多初等數學束手無策的問題迎刃而解。 π 的計算歷史也隨之進入了一個新的階段。
分析法時期
這一時期人們開始擺脫求多邊形周長的繁難計算,利用無窮級數或無窮連乘積來算 π 。
1593年,韋達給出
這一不尋常的公式是 π 的最早分析表達式。甚至在今天,這個公式的優美也會令我們贊嘆不已。它表明僅僅藉助數字2,通過一系列的加、乘、除和開平方就可算出 π 值。
接著有多種表達式出現。如沃利斯1650年給出:
1706年,梅欽建立了一個重要的公式,現以他的名字命名:
再利用分析中的級數展開,他算到小數後100位。
這樣的方法遠比可憐的魯道夫用大半生時間才摳出的35位小數的方法簡便得多。顯然,級數方法宣告了古典方法的過時。此後,對於圓周率的計算像馬拉松式競賽,紀錄一個接著一個:
1844年,達塞利用公式:
算到200位。
19世紀以後,類似的公式不斷涌現, π 的位數也迅速增長。1873年,謝克斯利用梅欽的一系列方法,級數公式將 π 算到小數後707位。為了得到這項空前的紀錄,他花費了二十年的時間。他死後,人們將這凝聚著他畢生心血的數值,銘刻在他的墓碑上,以頌揚他頑強的意志和堅韌不拔的毅力。於是在他的墓碑上留下了他一生心血的結晶: π 的小數點後707位數值。這一驚人的結果成為此後74年的標准。此後半個世紀,人們對他的計算結果深信不疑,或者說即便懷疑也沒有辦法來檢查它是否正確。以致於在1937年巴黎博覽會發現館的天井裡,依然顯赫地刻著他求出的 π 值。
又過了若干年,數學家弗格森對他的計算結果產生了懷疑,其疑問基於如下猜想:在 π 的數值中,盡管各數字排列沒有規律可循,但是各數碼出現的機會應該相同。當他對謝克斯的結果進行統計時,發現各數字出現次數過於參差不齊。於是懷疑有誤。他使用了當時所能找到的最先進的計算工具,從1944年5月到1945年5月,算了整整一年。1946年,弗格森發現第528位是錯的(應為4,誤為5)。謝克斯的值中足足有一百多位全都報了銷,這把可憐的謝克斯和他的十五年浪費了的光陰全部一筆勾銷了。
對此,有人曾嘲笑他說:數學史在記錄了諸如阿基米德、費馬等人的著作之餘,也將會擠出那麼一、二行的篇幅來記述1873年前謝克斯曾把 π 計算到小數707位這件事。這樣,他也許會覺得自己的生命沒有虛度。如果確實是這樣的話,他的目的達到了。
人們對這些在地球的各個角落裡作出不懈努力的人感到不可理解,這可能是正常的。但是,對此做出的嘲笑卻是過於殘忍了。人的能力是不同的,我們無法要求每個人都成為費馬、高斯那樣的人物。但成為不了偉大的數學家,並不意味著我們就不能為這個社會做出自己有限的貢獻。人各有其長,作為一個精力充沛的計算者,謝克斯願意獻出一生的大部分時光從事這項工作而別無報酬,並最終為世上的知識寶庫添了一小塊磚加了一個塊瓦。對此我們不應為他的不懈努力而感染並從中得到一些啟發與教育嗎?
1948年1月弗格森和倫奇兩人共同發表有808位正確小數的 π 。這是人工計算 π 的最高記錄。
計算機時期
1946年,世界第一台計算機ENIAC製造成功,標志著人類歷史邁入了電腦時代。電腦的出現導致了計算方面的根本革命。1949年,ENIAC根據梅欽公式計算到2035(一說是2037)位小數,包括准備和整理時間在內僅用了70小時。計算機的發展一日千里,其記錄也就被頻頻打破。
ENIAC:一個時代的開始
1973年,有人就把圓周率算到了小數點後100萬位,並將結果印成一本二百頁厚的書,可謂世界上最枯燥無味的書了。1989年突破10億大關,1995年10月超過64億位。1999年9月30日,《文摘報》報道,日本東京大學教授金田康正已求到2061.5843億位的小數值。如果將這些數字列印在A4大小的復印紙上,令每頁印2萬位數字,那麼,這些紙摞起來將高達五六百米。來自最新的報道:金田康正利用一台超級計算機,計算出圓周率小數點後一兆二千四百一十一億位數,改寫了他本人兩年前創造的紀錄。據悉,金田教授與日立製作所的員工合作,利用目前計算能力居世界第二十六位的超級計算機,使用新的計算方法,耗時四百多個小時,才計算出新的數位,比他一九九九年九月計算出的小數點後二千六百一十一位提高了六倍。圓周率小數點後第一兆位數是二,第一兆二千四百一十一億位數為五。如果一秒鍾讀一位數,大約四萬年後才能讀完。
不過,現在打破記錄,不管推進到多少位,也不會令人感到特別的驚奇了。實際上,把 π 的數值算得過分精確,應用意義並不大。現代科技領域使用的 π 值,有十幾位已經足夠。如果用魯道夫的35位小數的 π 值計算一個能把太陽系包圍起來的圓的周長,誤差還不到質子直徑的百萬分之一。我們還可以引美國天文學家西蒙·紐克姆的話來說明這種計算的實用價值:
"十位小數就足以使地球周界准確到一英寸以內,三十位小數便能使整個可見宇宙的四周准確到連最強大的顯微鏡都不能分辨的一個量。"
那麼為什麼數學家們還象登山運動員那樣,奮力向上攀登,一直求下去而不是停止對 π 的探索呢?為什麼其小數值有如此的魅力呢?
這其中大概免不了有人類的好奇心與領先於人的心態作怪,但除此之外,還有許多其它原因。
奔騰與圓周率之間的奇妙關系……
1、它現在可以被人們用來測試或檢驗超級計算機的各項性能,特別是運算速度與計算過程的穩定性。這對計算機本身的改進至關重要。就在幾年前,當Intel公司推出奔騰(Pentium)時,發現它有一點小問題,這問題正是通過運行 π 的計算而找到的。這正是超高精度的 π 計算直到今天仍然有重要意義的原因之一。
2、 計算的方法和思路可以引發新的概念和思想。雖然計算機的計算速度超出任何人的想像,但畢竟還需要由數學家去編製程序,指導計算機正確運算。實際上,確切地說,當我們把 π 的計算歷史劃分出一個電子計算機時期時,這並非意味著計算方法上的改進,而只是計算工具有了一個大飛躍而已。因而如何改進計算技術,研究出更好的計算公式,使公式收斂得更快、能極快地達到較大的精確度仍是數學家們面對的一個重要課題。在這方面,本世紀印度天才數學家拉馬努揚得出了一些很好的結果。他發現了許多能夠迅速而精確地計算 π 近似值的公式。他的見解開通了更有效地計算 π 近似值的思路。現在計算機計算 π 值的公式就是由他得到的。至於這位極富傳奇色彩的數學家的故事,在這本小書中我們不想多做介紹了。不過,我希望大家能夠明白 π 的故事講述的是人類的勝利,而不是機器的勝利。
3、還有一個關於 π 的計算的問題是:我們能否無限地繼續算下去?答案是:不行!根據朱達偌夫斯基的估計,我們最多算1077位。雖然,現在我們離這一極限還相差很遠很遠,但這畢竟是一個界限。為了不受這一界限的約束,就需要從計算理論上有新的突破。前面我們所提到的計算,不管用什麼公式都必須從頭算起,一旦前面的某一位出錯,後面的數值完全沒有意義。還記得令人遺憾的謝克斯嗎?他就是歷史上最慘痛的教訓。
4、於是,有人想能否計算時不從頭開始,而是從半截開始呢?這一根本性的想法就是尋找並行演算法公式。1996年,圓周率的並行演算法公式終於找到,但這是一個16進位的公式,這樣很容易得出的1000億位的數值,只不過是16進位的。是否有10進位的並行計算公式,仍是未來數學的一大難題。
5、作為一個無窮數列,數學家感興趣的把 π 展開到上億位,能夠提供充足的數據來驗證人們所提出的某些理論問題,可以發現許多迷人的性質。如,在 π 的十進展開中,10個數字,哪些比較稀,哪些比較密? π 的數字展開中某些數字出現的頻率會比另一些高嗎?或許它們並非完全隨意?這樣的想法並非是無聊之舉。只有那些思想敏銳的人才會問這種貌似簡單,許多人司空見慣但卻不屑發問的問題。
6、數學家弗格森最早有過這種猜想:在 π 的數值式中各數碼出現的概率相同。正是他的這個猜想為發現和糾正向克斯計算 π 值的錯誤立下了汗馬功勞。然而,猜想並不等於現實。弗格森想驗證它,卻無能為力。後人也想驗證它,也是苦於已知的 π 值的位數太少。甚至當位數太少時,人們有理由對猜想的正確性做出懷疑。如,數字0的出現機會在開始時就非常少。前50位中只有1個0,第一次出現在32位上。可是,這種現象隨著數據的增多,很快就改變了:100位以內有8個0;200位以內有19個0;……1000萬位以內有999,440個0;……60億位以內有599,963,005個0,幾乎佔1/10。
其他數字又如何呢?結果顯示,每一個都差不多是1/10,有的多一點,有的少一點。雖然有些偏差,但都在1/10000之內。
7、人們還想知道: π 的數字展開真的沒有一定的模式嗎?我們希望能夠在十進制展開式中通過研究數字的統計分布,尋找任何可能的模型――如果存在這種模型的話,迄今為止尚未發現有這種模型。同時我們還想了解: π 的展開式中含有無窮的樣式變化嗎?或者說,是否任何形式的數字排列都會出現呢?著名數學家希爾伯特在沒有發表的筆記本中曾提出下面的問題: π 的十進展開中是否有10個9連在一起?以現在算到的60億位數字來看,已經出現:連續6個9連在一起。希爾伯特的問題答案似乎應該是肯定的,看來任何數字的排列都應該出現,只是什麼時候出現而已。但這還需要更多 π 的數位的計算才能提供切實的證據。
8、在這方面,還有如下的統計結果:在60億數字中已出現連在一起的8個8;9個7;10個6;小數點後第710150位與3204765位開始,均連續出現了七個3;小數點52638位起連續出現了14142135這八個數字,這恰是的前八位;小數點後第2747956位起,出現了有趣的數列876543210,遺憾的是前面缺個9;還有更有趣的數列123456789也出現了。
如果繼續算下去,看來各種類型的數字列組合可能都會出現。
拾零: π 的其它計算方法
在1777年出版的《或然性算術實驗》一書中,蒲豐提出了用實驗方法計算 π 。這個實驗方法的操作很簡單:找一根粗細均勻,長度為 d 的細針,並在一張白紙上畫上一組間距為 l 的平行線(方便起見,常取 l = d/2),然後一次又一次地將小針任意投擲在白紙上。這樣反復地投多次,數數針與任意平行線相交的次數,於是就可以得到 π 的近似值。因為蒲豐本人證明了針與任意平行線相交的概率為 p = 2l/πd 。利用這一公式,可以用概率方法得到圓周率的近似值。在一次實驗中,他選取 l = d/2 ,然後投針2212次,其中針與平行線相交704次,這樣求得圓周率的近似值為 2212/704 = 3.142。當實驗中投的次數相當多時,就可以得到 π 的更精確的值。
1850年,一位叫沃爾夫的人在投擲5000多次後,得到 π 的近似值為3.1596。目前宣稱用這種方法得到最好結果的是義大利人拉茲瑞尼。在1901年,他重復這項實驗,作了3408次投針,求得 π 的近似值為3.1415929,這個結果是如此准確,以致於很多人懷疑其實驗的真偽。如美國猶他州奧格登的國立韋伯大學的L·巴傑就對此提出過有力的質疑。
不過,蒲豐實驗的重要性並非是為了求得比其它方法更精確的 π 值。蒲豐投針問題的重要性在於它是第一個用幾何形式表達概率問題的例子。計算 π 的這一方法,不但因其新穎,奇妙而讓人叫絕,而且它開創了使用隨機數處理確定性數學問題的先河,是用偶然性方法去解決確定性計算的前導。
在用概率方法計算 π 值中還要提到的是:R·查特在1904年發現,兩個隨意寫出的數中,互素的概率為6/π2。1995年4月英國《自然》雜志刊登文章,介紹英國伯明翰市阿斯頓大學計算機科學與應用數學系的羅伯特·馬修斯,如何利用夜空中亮星的分布來計算圓周率。馬修斯從100顆最亮的星星中隨意選取一對又一對進行分析,計算它們位置之間的角距。他檢查了100萬對因子,據此求得 π 的值約為3.12772。這個值與真值相對誤差不超過5%。
通過幾何、微積分、概率等廣泛的范圍和渠道發現 π ,這充分顯示了數學方法的奇異美。 π 竟然與這么些表面看來風馬牛不相及的試驗,溝通在一起,這的確使人驚訝不已。