浙江萬里學院基礎學院綜合部 田増鋒
本文在Python 的sympy.stats 宏包的基礎上設計實現(xiàn)了概率論中離散型隨機實驗,針對教學中遇到的各種相關問題給出了實驗方案,通過概率實驗對教與學起到良好的輔助作用。
隨著計算技術和算法的發(fā)展,尤其是便攜式的計算工具(例如各種圖形計算器如HP Prime,TI Nspire 等)的普及,原來需要手工計算的一些數(shù)學課程引入了數(shù)學實驗教學方法,即通過各種計算工具或者軟件進行數(shù)學的探究式學習。
相較于《高等數(shù)學》和《線性代數(shù)》課程的實驗,《概率論和數(shù)理統(tǒng)計》課程中的實驗基本上是針對數(shù)理統(tǒng)計部分的,在概率論部分除了可以使用計算器進行階乘、排列數(shù)、組合數(shù)以及積分和導數(shù)計算之外,基本上其他的計算仍然是通過手動進行的,在概率論部分缺乏實驗環(huán)節(jié)。
目前在概率論中引入數(shù)學實驗的主要軟件有Mathematica,R,MATLAB,其中R 語言主要功能是統(tǒng)計分析和計算,另外兩個商業(yè)軟件價值不菲,甚至于會摻雜政治因素導致限制其使用。
Python 作為一種開源的,完全面向對象(OOP)的語言,自從出現(xiàn)以來得到了飛速發(fā)展,其功能得到快速擴充。在文獻[5]中給出了Python 在概率論中的一個初步應用,使用的是逐步計算,沒有使用Python 中的隨機對象。
在Python 語言的sympy 包中引入了大量的概率論部分的功能,其中包含很多隨機對象及其方法,調用這些方法或者函數(shù)可以完成基本的概率論實驗部分。本文在Python 的sympy.stats 包基礎上進行概率論中離散隨機變量部分實驗教學設計與實現(xiàn)。
在古典概型中運用最多的就是拋硬幣和擲骰子實驗。這兩種隨機對象在sympy.stats 中分別定義為Coin 和Die。要進行多次實驗則調用sample 函數(shù)(要求隨機變量取數(shù)值結果)即可。
例1:求拋硬幣實驗的概率分布;進行10 次拋硬幣實驗。

其中函數(shù)density 計算概率分布或者密度,sample 則是進行實驗取樣,size 是樣本大小,S.Half 是sympy 中對1/2 的精確表示。其中的C 和Y 分別表示拋硬幣這個隨機對象和二項分布隨機對象,因為sample 中只實現(xiàn)數(shù)值型隨機對象的取樣,所以這里采用二項分布得到10 次拋硬幣的實驗結果。
在sympy.stats 中定義了常用的離散型隨機變量對象,例如二項分布、超幾何分布、泊松分布等,對于一般的有限樣本點的離散隨機變量也有合適的定義方法。可以對離散隨機變量計算其(條件)概率、概率分布、期望、方差、離散變量函數(shù)的分布(或期望)等直接計算。
例2:某公司生產(chǎn)一種產(chǎn)品300 件,根據(jù)歷史記錄次品率為0.01,問現(xiàn)在這300 件產(chǎn)品經(jīng)檢驗廢品數(shù)大于5的概率是多少?
第一種方法,這是300 次獨立的Bernoulli 實驗,可以進行使用二項分布進行精確計算,其中函數(shù)P 用于計算概率。

計算結果: 0.08392,其中最后一句round(5)是進行近似計算的精度設置。
例3:已知變量X 取值-1,0,1,2,相應概率依次為1/2c,3/(4c),5/(8c),7/(16c),確定常數(shù)c,并計算P(X<1|x ≠0)
實驗方案如下,用solve 命令求解方程得到c,然后用FiniteRV 構建離散隨機變量,再使用given 函數(shù)構造條件概率分布,最后求概率。

這個例子中使用了條件概率及其分布。這里也能直接計算離散隨機變量函數(shù)的概率分布或者概率。
在計算隨機變量的數(shù)學期望和方差時可以直接調用函數(shù)E 和variance 來計算。
例4:已知X 服從二項分布,而且E(X)=3,D(X)=2,求X 的全部可能取值,并計算P(X ≤8)

要計算P(X ≤8)則需要把n 和p 帶入,進行9 次Bernoulli 實驗需要采用二項分布來計算概率,

結果:19682/19683,也可以通過。round(10)得到近似值0.9999491947
從這個實驗中可以體現(xiàn)sympy.stats 的強大功能在于符號計算,這個功能是Python 中其他的包所不具備的,相當于其他數(shù)學實驗語言中的符號計算。
例5:設X 服從參數(shù)為2 的泊松分布,Y=3X-2,試求E(Y),D(Y),cov(X,Y),以及ρXY。

計算結果:4,18,6,1.在sympy.stats 中沒有定義相關系數(shù)的函數(shù),這里直接使用定義計算即可。
在概率論和數(shù)理統(tǒng)計中中心極限定理有著至關重要的作用。這里分別從直接計算、正態(tài)分布近似計算以及蒙特卡洛模擬方法近似驗證三種情況進行實驗。對于抽象的定理給出一種直觀模擬驗證。
例6:某公司有200 名員工參加一種資格考試。按照往年經(jīng)驗,該考試通過率為0.8。計算這200 名員工至少有150 人通過考試的概率?


第一種方法,計算精確的概率值作為后續(xù)與近似計算比較的依據(jù)
from sympy.stats import Binomial, P from sympy import Ge,Symbol
X = Binomial('x',200, 0.8, 1, 0)
P(Ge(X,150))
計算結果:0.965503225134272

結果:0.9616364296,和精確值比較而言用中心極限定理近似計算的精度相當高。
第三種方法,采用Monte-Carlo 方法進行隨機模擬實驗。

實驗結果:0.97,0.945,0.95,0.955,0.975,0.965,0.96,0.965,0.965,0.965....
從結果分析,頻率在0.96 附近徘徊,也就是在概率周圍浮動,這體現(xiàn)了頻率圍繞著概率上下波動的統(tǒng)計意義。
通過上述離散隨機變量的實驗可見,Python 的sympy.stats 包中包含絕大多數(shù)概率論部分實驗中用到的功能,和Mathematica 類似,也是一種面向任務的語言,通過簡單的編程即可實現(xiàn)概率論中離散型隨機實驗。
通過概率論的實驗可以將抽象的理論具體化、形象化,可幫助學生理解“學”中的難點,激發(fā)學生的學習熱情和創(chuàng)新意識,而且應用靈活,可穿插于課堂教學中,亦可設計成獨立實驗。以計算為模型學習概率論理,讓學生在“看得見摸得著”的理論學習中提升自己的專業(yè)水平,在深化學生對理論知識理解的同時,提高其運用理論結合工具解決復雜工程問題的能力。
引用
[1] 吳贛昌,主編.概率論與數(shù)理統(tǒng)計(第五版)[M].北京:中國人民大學出版社,2017.
[2] 李麗潔,潘偉權,尹譽銘.基于R語言的概率論可視化教學方法[J].中阿科技論壇(中英阿文),2020(7):158-160.
[3] 馬永剛,劉俊梅.基于Matlab軟件的案例教學在概率論課程中的實踐[J].教育現(xiàn)代化,2020(4):150-152.
[4] 解博麗.概率論與數(shù)理統(tǒng)計引入MATLAB實驗教學手段的必要性[J].教育教學論壇,2020(23):280-282.
[5] 王福順.Python賦能概率論與數(shù)理統(tǒng)計教學與實踐[J].中國多媒體與網(wǎng)絡教學學報(上旬刊),2021(3):218-220.