魏章志,吳婧澤,李 杰
宿州學(xué)院數(shù)學(xué)與統(tǒng)計(jì)學(xué)院,安徽宿州,234000
Mathematica 基于具有突破性意義的 Wolfram 語言,具有強(qiáng)大的符號和數(shù)值計(jì)算能力,與Matlab和Maple構(gòu)成數(shù)學(xué)軟件三巨頭[1]。Mathematica具有大量的內(nèi)置函數(shù),使得解決問題的過程變得很簡單,這也是Mathematica創(chuàng)始人史蒂芬·沃爾夫勒姆一直堅(jiān)持的軟件設(shè)計(jì)理念[2]。Mathematica具有良好交互式功能的Notebook,可計(jì)算的幻燈片功能,文檔資料豐富,代碼賞心悅目,越來越受到教育工作者和科學(xué)研究者的喜愛[3-6]。由于其函數(shù)式編程的優(yōu)勢、任意精度的數(shù)值計(jì)算,突出的符號計(jì)算和圖形處理能力,很多數(shù)學(xué)和物理研究者把Mathematica作為自己研究的首選程序語言[7-8]。在概率統(tǒng)計(jì)學(xué)習(xí)研究中,常見的經(jīng)典問題,使用Mathematica進(jìn)行處理,結(jié)果直觀易懂,代碼簡潔,筆記本(Notebook)易于分享和修改[9]。本文利用Mathematica模擬概率統(tǒng)計(jì)的幾個經(jīng)典問題:三門問題,大數(shù)定律問題,中心極限定理。三門問題是違反一般人的直覺,大數(shù)定律和中心極限定理是符合一般人的直覺,通過Mathematica進(jìn)行隨機(jī)模擬可以讓學(xué)生對理論結(jié)果印象更深,同時(shí)掌握使用軟件解決問題的辦法,激發(fā)分析問題和解決問題的興趣。當(dāng)前教學(xué)大綱里對利用軟件處理問題并沒有要求,Mathematica軟件的使用是有益于學(xué)生應(yīng)用能力拓展。
三門問題也稱蒙提霍爾問題(Monty Hall Problem),主要是因?yàn)槌鲎悦商峄魻?Monty Hall)主持的大型游戲節(jié)目 Let′s Make a Deal?,F(xiàn)將原問題重新描述如下[10]:假設(shè)游戲者參加一個游戲,規(guī)則如下:
(1)三個關(guān)閉的門后隨機(jī)擺上獎品:一輛車,兩頭山羊;
(2)游戲目的是猜中哪個門后面有車,一旦猜中,即可獲得汽車;
(3)假設(shè)先隨機(jī)挑選一個門,不妨設(shè)為門1,其他兩個門稱為門2和門3;
(4)打開選中的門之前,主持人打開門2或3中一個后面沒有車的門來增加懸念;
(5)然后主持人給游戲者一次改變原來選項(xiàng)的機(jī)會。
現(xiàn)在的問題:游戲者最有利的選擇是堅(jiān)持最初的選擇,還是改變選擇?
這個問題可以使用全概率公式或者決策樹方法得到換到另一個門(改變選項(xiàng))是最有利的,因?yàn)楂@得汽車的概率為2/3。這個問題的答案是違反一般人的直覺,正因?yàn)槿绱耍鹆巳藗兊臉O大興趣。利用數(shù)學(xué)軟件通過隨機(jī)模擬對這個問題進(jìn)行研究,隨機(jī)模擬結(jié)果符合理論分析結(jié)果[10]??梢酝ㄟ^Mathematica對三門問題進(jìn)行隨機(jī)模擬,代碼如下:
try=100; (*試驗(yàn)次數(shù)*)
jp0={羊,羊,汽車};(*原始獎品 :羊,汽車*)
jp=RandomSample[jp0] ;(*隨機(jī)擺放獎品,參與游戲者不知道,只有主持人知道*)
choice1=RandomChoice[jp,1] ;(*游戲一次*)
count1=Count[RandomChoice[jp,try],汽車] ;(*不換選項(xiàng)的中獎計(jì)數(shù)。如果抽到汽車就計(jì)數(shù)一次*)
count2=Count[RandomChoice[jp,try],羊] ;
(*換選項(xiàng)的中獎計(jì)數(shù)。如果抽到羊就計(jì)數(shù)一次,抽到羊如果換,肯定中獎*)
Print["不換選項(xiàng)的中獎頻率","=",count1/try,"=",N[count1/try,3]]
Print["換選項(xiàng)的中獎頻率","=",count2/try,"=",N[count2/try,3]]
程序運(yùn)行結(jié)果如下:
不換選項(xiàng)的中獎頻率=9/25=0.36
換選項(xiàng)的中獎頻率=16/25=0.64
試驗(yàn)結(jié)果表明,改變當(dāng)初的選擇更有利于獲得汽車。可以通過增加試驗(yàn)次數(shù)得到更穩(wěn)定的結(jié)果。由于是模擬隨機(jī)事件,每次程序運(yùn)行的結(jié)果不盡相同,但可以看出換選項(xiàng)中獎的可能性較大,從而佐證了理論分析結(jié)果的正確性??梢钥闯?,使用Mathematica的內(nèi)置函數(shù),可以避免一般過程式編程語言的循環(huán)與判斷,比如像Matlab,C,Python等程序語言中的for循環(huán)與if判斷語句。程序中可以體現(xiàn)函數(shù)式編程的巨大優(yōu)勢:代碼很簡潔,可讀性強(qiáng),內(nèi)置函數(shù)讓研究者更容易關(guān)注問題本身而不是程序設(shè)計(jì)。還可以看出,這里可以直接使用漢字作為字符串而不加其他任何符號,也可以作為變量名,有利于中文為母語的研究者使用,這也是Mathematica軟件的一個小亮點(diǎn)。
很多教科書都是先利用頻率定義導(dǎo)出概率的定義,這種定義方法雖不嚴(yán)格,但直觀易懂,這種處理方式的理論依據(jù)就是大數(shù)定律。大數(shù)定律的基本思想就是大量隨機(jī)現(xiàn)象的平均結(jié)果幾乎不再是隨機(jī)的,即大量隨機(jī)現(xiàn)象的平均結(jié)果具有穩(wěn)定性。通過Mathematica可以多次模擬一個隨機(jī)變量的取值情況,然后取它們的平均結(jié)果,觀察平均結(jié)果是不是穩(wěn)定的?一般常見的是使用擲硬幣或者擲骰子來模擬這種情況。在這里模擬擲骰子的情形。由于擲骰子的結(jié)果服從離散均勻分布,其數(shù)學(xué)期望為3.5。模擬代碼如下
touzi={1,2,3,4,5,6};(*樣本空間*)
M=500;(*模擬次數(shù)*)
fretouzi=Table[Mean[RandomChoice[touzi,n]],{n,1,M}];(*頻率*)
g1=ListPlot[fretouzi,PlotRange->All];(*頻率作圖*)
f[x_]=3.5;(*數(shù)學(xué)期望*)
g2=Plot[f[x],{x,0,M},PlotStyle->Red];
Show[g1,g2]
模擬結(jié)果如圖1。
圖1 擲骰子500次模擬的平均結(jié)果
從圖1中可以看出,擲骰子500次的平均結(jié)果是穩(wěn)定在數(shù)學(xué)期望附近。說明大量的隨機(jī)現(xiàn)象的平均結(jié)果是穩(wěn)定的??梢愿哪M次數(shù),得到類似的結(jié)果。對于連續(xù)型隨機(jī)變量,也可以進(jìn)行類似模擬。這里以常見的指數(shù)分布為例進(jìn)行模擬:
m=10^6;
m1=10^3;
data1=RandomVariate[ExponentialDistribution[0.01],m];
freq1=Table[Mean[RandomSample[data1,n]],{n,1,m1}];
g1=ListPlot[freq1,PlotRange->All];
g[x_]=100;
g2=Plot[g[x],{x,0,m1},PlotStyle->Red];
Show[g1,g2]
模擬結(jié)果如圖2:
圖2 1 000次隨機(jī)取數(shù)(指數(shù)分布)的平均結(jié)果
從圖2中可以看出,大量服從指數(shù)分布(數(shù)學(xué)期望為100)的隨機(jī)數(shù)的平均值穩(wěn)定在數(shù)學(xué)期望值附近。
中心極限定理的基本思想是大量隨機(jī)變量的和近似服從正態(tài)分布。在這里引用經(jīng)典的獨(dú)立同分布的中心極限定理(Lévy-Lindberg),其一般數(shù)學(xué)描述簡述如下[11]:
設(shè)X1,X2,…Xn…為獨(dú)立同分布的隨機(jī)變量序列,其數(shù)學(xué)期望為μ,方差為σ2>0。則
一般教科書上并沒有提供中心極限定理的理論證明,因此進(jìn)行隨機(jī)模擬達(dá)到對定理的直觀理解是非常有必要的??梢赃x取服從參數(shù)為0.01的指數(shù)分布進(jìn)行模擬,相關(guān)代碼如下:
data2=Table[Sum[RandomVariate[ExponentialDistribution[0.01]],{i,1,2 000}],{j,1,2 000}];
Histogram[data2,40,"PDF"]
代碼運(yùn)行結(jié)果如圖3。
圖3 2 000個隨機(jī)取數(shù)(指數(shù)分布)的和
由圖3可知,大量隨機(jī)變量的和近似服從正態(tài)分布。模擬的代碼較短,對比文獻(xiàn)[12],可以看出,采取函數(shù)式編程比過程式編程的代碼簡短明了。
通過利用Mathematica軟件對三門問題、大數(shù)定律,中心極限定理進(jìn)行隨機(jī)模擬,從而佐證了教科書上的經(jīng)典理論,有利于學(xué)生更加形象地、深刻地理解全概率公式,大數(shù)定律,中心極限定理。可以看出,相關(guān)隨機(jī)模擬的程序代碼比較簡短,沒有復(fù)雜的循環(huán)和判斷語句,主要是因?yàn)镸athematica的函數(shù)式編程讓研究者關(guān)注于問題的本身而不是程序設(shè)計(jì),從而更有利于去解決問題。可以發(fā)現(xiàn)應(yīng)用Mathematica處理概率統(tǒng)計(jì)問題,能加深對基本概念的理解。教學(xué)中,可將更多的概率統(tǒng)計(jì)內(nèi)容引入Mathematica,通過軟件展示,讓更多的內(nèi)容更加直觀地呈現(xiàn)在學(xué)生面前,激發(fā)他們的學(xué)習(xí)興趣,提高他們的應(yīng)用軟件解決問題的能力。