自己動(dòng)手求圓周率
◇廣東龔衛(wèi)東
1問(wèn)題來(lái)源及產(chǎn)生過(guò)程
高中數(shù)學(xué)必修3算法部分,有這樣一道試題:
圖1
圖1是用模擬方法估計(jì)圓周率π的程序框圖,P表示估計(jì)結(jié)果,則圖中空白框內(nèi)應(yīng)填入().
AP=N/1 000;
BP=4N/1 000;
CP=M/1 000;
DP=4M/1 000
初次接觸此類問(wèn)題,同學(xué)們會(huì)有一定困難,經(jīng)過(guò)老師講解,明白該算法實(shí)際就是幾何概型中隨機(jī)“撒豆子”模型,通過(guò)面積測(cè)度比求得圓周率,是一個(gè)由“形”到“數(shù)”的過(guò)程.
此方法引起同學(xué)們極大興趣,而且從小就知道祖沖之發(fā)現(xiàn)圓周率的故事,π在古今中外數(shù)學(xué)史上名聲赫赫,現(xiàn)在有算法指出這種方法能求π的值,既興奮又很想親身實(shí)踐,看看自己求出的圓周率與數(shù)學(xué)先賢有什么不同.
2研究性學(xué)習(xí)過(guò)程
現(xiàn)在當(dāng)然不用再像祖沖之一樣在院子里畫一個(gè)大圓,一點(diǎn)一點(diǎn)實(shí)地測(cè)量. Excel軟件自帶有VBA程序設(shè)計(jì)功能. VBA(Visual Basic for Application)是現(xiàn)在可用的最容易學(xué)習(xí)、最容易使用同時(shí)也是最復(fù)雜的應(yīng)用程序自動(dòng)化語(yǔ)言(過(guò)去常常稱為宏語(yǔ)言)之一,即使以前從來(lái)沒(méi)有編寫過(guò)程序,也能夠使用VBA語(yǔ)言開(kāi)發(fā)出解決方案.
方法1對(duì)學(xué)生而言,學(xué)習(xí)過(guò)流程圖之后再學(xué)習(xí)VBA語(yǔ)言,并非難事,無(wú)非是學(xué)習(xí)幾個(gè)具體的輸入、輸出及循環(huán)語(yǔ)句,并掌握好語(yǔ)法格式的問(wèn)題. 事實(shí)上,學(xué)生很快就將問(wèn)題中的框圖編成了程序. 在Excel中,打開(kāi)“宏”,創(chuàng)建名為“撒豆子”的宏,按F5運(yùn)行,得到輸出結(jié)果π=3.136 (圖2、圖3).
圖2
圖3
該程序?qū)崿F(xiàn)“撒豆子”的關(guān)鍵,是使用了隨機(jī)函數(shù)RND,它會(huì)隨機(jī)產(chǎn)生一個(gè)(0, 1)之間的數(shù).
圖4
方法2在Excel中,不編程也可用隨機(jī)函數(shù)分別選取橫、縱坐標(biāo)x、y,統(tǒng)計(jì)x2+y2<1的坐標(biāo)數(shù),由比值求π.
圖5
上述2種方法都借助信息技術(shù)手段輕松完成了1 000次的數(shù)學(xué)實(shí)驗(yàn),模擬幾何概型“撒豆子”,其原型是布馮投針實(shí)驗(yàn). 1777年,法國(guó)數(shù)學(xué)家布馮(G.L.L.Buffon,1707—1788年)做了一個(gè)投針實(shí)驗(yàn),這個(gè)實(shí)驗(yàn)被認(rèn)為是幾何概型的第一個(gè)實(shí)驗(yàn). 他在一張大紙上畫了一些等距的平行線,再把長(zhǎng)度等于相鄰平行線距離一半的針投到紙上,共計(jì)投針2212次,統(tǒng)計(jì)出有704次與平行線相交,它們的商2 212÷704≈3.142045,與π非常接近.以后又有多位數(shù)學(xué)家做過(guò)類似實(shí)驗(yàn),得到相近結(jié)果. 可以證明,針長(zhǎng)取平行線間距的一半時(shí),投針次數(shù)與針線相交次數(shù)的比值在π附近擺動(dòng).
學(xué)生對(duì)自己動(dòng)手實(shí)驗(yàn)得到結(jié)果感到欣喜的同時(shí),對(duì)結(jié)果的精度尚不能滿意. 究其原因,估計(jì)是“豆子”數(shù)量太少的緣故. 方法2中,可以拖動(dòng)“+”使得各列數(shù)據(jù)相應(yīng)增加,如增加到10 000組,唯一缺點(diǎn)是數(shù)表變得很長(zhǎng). 對(duì)電腦來(lái)講,倒也不算什么難事,只是數(shù)據(jù)精度仍不盡如人意,得到的π值是4×0.7833=3.1332(如圖6).
圖6
怎樣才能體驗(yàn)到古代數(shù)學(xué)家探尋圓周率時(shí)不斷提高精度的成功?當(dāng)然可以繼續(xù)向下拖動(dòng)數(shù)表中各列數(shù)據(jù),通過(guò)嘗試似乎成效不大. 回到方法1,在原題流程圖中,限定實(shí)驗(yàn)次數(shù)是1 000,如果改進(jìn)程序,讓循環(huán)次數(shù)依靠輸入決定,就可以設(shè)定希望的循環(huán)次數(shù),而且還能看到循環(huán)次數(shù)與結(jié)果精度之間的關(guān)系.
改進(jìn)的程序和部分運(yùn)算結(jié)果如圖7、8所示.
圖7
圖8 (n=10 000)
當(dāng)n=100 000時(shí),結(jié)果為3.138 48;當(dāng)n=1 000 000時(shí),為3.143 714. 發(fā)現(xiàn)循環(huán)次數(shù)越高,即模擬次數(shù)越多,結(jié)果的精度也越高.
上面探究的精度依然沒(méi)有達(dá)到讓人欣喜若狂的程度.繼續(xù)增加循環(huán)次數(shù)嗎?事實(shí)上,當(dāng)循環(huán)次數(shù)為100萬(wàn)的時(shí)候,英特爾I5處理器的臺(tái)式電腦運(yùn)行圖7的程序已經(jīng)花費(fèi)了33 s,讓人等結(jié)果時(shí)都有些心焦. 能不能從方法上再挖掘一下?
圖9
圖4中陰影部分與正方形面積的比值,就應(yīng)該等于π.通過(guò)分析發(fā)現(xiàn),精度不高的主要原因,其實(shí)是由于模擬實(shí)驗(yàn)“撒豆子”——也就是產(chǎn)生隨機(jī)數(shù)的過(guò)程,是帶有很強(qiáng)隨機(jī)性的,是否落在陰影中隨不同實(shí)驗(yàn)可能有不同結(jié)果. 根據(jù)這個(gè)情況,大膽改進(jìn)布馮實(shí)驗(yàn)的思想,依然采用幾何概型的面積方法,但不用隨機(jī)函數(shù),而是采用“勻鋪”的辦法,在區(qū)域內(nèi)均勻地一個(gè)一個(gè)地把點(diǎn)“擺”上去,統(tǒng)計(jì)陰影部分點(diǎn)的個(gè)數(shù),用點(diǎn)的個(gè)數(shù)比替代面積比(如圖9).
圖10中程序?qū)嶋H上將邊長(zhǎng)為1的正方形劃分成m×n條線,每個(gè)交點(diǎn)均勻分布在區(qū)域之內(nèi),每個(gè)點(diǎn)是否在陰影部分是確定的,避免了隨機(jī)試驗(yàn)的不確定性.程序中語(yǔ)句s=s+m的功能,是將圓弧上的點(diǎn)計(jì)算在陰影內(nèi)部.
圖10
圖11
按F5運(yùn)行程序,輸入m、n的值,得到不同的π的近似值. 當(dāng)m=1 000,n=100時(shí),得π≈3.158 16;當(dāng)m=1 000,n=1 000時(shí),得π≈3.141 528;m=10 000,n=10 000時(shí),得π≈3.141 590 24(如圖11).
終于得到了較為滿意的結(jié)果,而且,只要每次輸入的m和n的值相同,程序運(yùn)算結(jié)果都一樣,不會(huì)因?yàn)殡S機(jī)性而改變. 此時(shí)在1×1的正方形內(nèi),“勻鋪”了1億個(gè)點(diǎn)!
3研究成果與啟示
上述探究都來(lái)自于一道算法試題和布馮投針實(shí)驗(yàn),通過(guò)這些探究,學(xué)生明白,數(shù)學(xué)也是可以做實(shí)驗(yàn)的!信息技術(shù)不僅能在數(shù)形結(jié)合中讓我們把抽象的數(shù)通過(guò)形來(lái)展示清楚,也可以通過(guò)“形”反過(guò)來(lái)求“數(shù)”,利用幾何概型的這種數(shù)學(xué)思想很奇妙. 學(xué)生也進(jìn)一步理解了算法思想,形成了編程探究一些問(wèn)題結(jié)果的意識(shí)和能力.
當(dāng)然,現(xiàn)在求圓周率的方法其實(shí)有很多,學(xué)生可以自己上網(wǎng)檢索,學(xué)習(xí)了解.
(作者單位:廣東省深圳市高級(jí)中學(xué))