王鵬 董平軒 冉玉梅



關鍵詞:概率論與數理統計;隨機數;Matlab;輔助教學;函數
中圖分類號:TP311 文獻標識碼:A
文章編號:1009-3044(2023)02-0138-03
1 引言
眾所周知,自然界發生的現象可分為兩類。一類現象在一定條件下發生的結果是完全可以預知的,稱為必然現象。另一類現象發生的結果事先是無法準確預知的,稱為隨機現象。《概率論與數理統計》正是講述隨機現象統計規律的課程[1],但是在教學過程中,我們發現純粹的概念表述和公式推導不利于學生對隨機現象的理解,而且計算過程相當繁瑣,計算結果也不直觀,而引入Matlab作為教學輔助工具則正好能彌補傳統教學方式的缺點,能取得更好的教學效果。但是在使用Matlab輔助《概率論與數理統計》教學過程中面臨的一個首要問題就是要生成一個隨機數,因此有必要對隨機數的Matlab實現專門進行系統研究。
2 Matlab簡介
Matlab是當今國際很流行的科學計算軟件,Mat?lab語言是當今國際上最流行的科學與工程計算編程語言[2]。信息技術、計算機技術發展到今天,科學計算在各個領域得到了廣泛的應用。在諸多方面例如控制論、系統仿真、數學計算等問題,如果自己去編寫程序,不僅會消耗大量的時間,而且往往質量不高。Matlab作為一個專業的數值計算軟件,提供了大量的運算函數,可以方便地進行各種復雜的數學計算,而且效率極高,同時具有可視化、編程、GUI和編輯等功能[3],因此極為適宜在《概率論和數理統計》教學中作為輔助工具,它不僅可以快速地調用函數進行概率和統計計算,同時也可以將結果可視化、直觀化,極大地促進學生對課程知識的學習和理解。
3 Matlab 中的基本隨機數生成函數
Matlab提供了2個基本的生成偽隨機數的函數rand 和randn[4],其中rand函數用來生成[0,1]上均勻分布隨機數,randn函數用來生成標準正態分布隨機數。由[0,1]上均勻分布隨機數可以生成其他分布的隨機數,由標準正態分布隨機數可以生成一般正態分布隨機數。在不指明分布的情況下,通常所說的隨機數是指[0,1]上均勻分布的隨機數。在不同版本的Matlab 中,rand函數有幾種通用的調用格式,如下表所示:
其中,輸入參數應為正整數,若輸入負整數,則被視為0,此時輸出一個空矩陣。
下例調用rand函數生成一個4?4的隨機數矩陣和一個1?10的隨機數矩陣,然后再調用hist函數畫出對應的頻數直方圖。
>> x=rand(4)
x =
0.1869 0.7094 0.6551 0.9597
0.4898 0.7547 0.1626 0.3404
0.4456 0.2760 0.1190 0.5853
0.6463 0.6797 0.4984 0.2238
>> y=x(:);
>> x=rand(1,10)
x =
0.1068 0.6538 0.4942 0.7791 0.7150
0.9037 0.8909 0.3342 0.6987 0.1978
>> hist(x)
下例調用randn函數生成一個標準正態分布N(0,1)的1行10列矩陣。
>> x=randn(1,10)
x =
0.0799 -0.9485 0.4115 0.6770 0.8577-0.6912 0.4494 0.1006 0.8261 0.5362
除了以上兩個基本隨機數函數之外,還可以調用randperm(N)函數,它可以生成一個1,2,...,N的一個隨機排列。如下例所示:
>> randperm(6)
ans=
1 4 3 6 2 5
>> randperm(6)
ans=
5 6 4 1 3 2
>> randperm(6)
ans=
2 4 3 6 1 5
rand函數還可以用以下兩種方式調用:
1) rand(method,s)
用method確定的隨機數生成器生成隨機數,此時用s的值初始化隨機數生成器的狀態。其中輸入參數method用來指定隨機數生成器所采用的算法,method 是字符串變量,它的可能取值如下表所示:
參數s可以理解為生成隨機數序列的初始種子,它的值依賴于所選擇的method參數,如果method設定為state或者twister,則s的值必須是一個0到232-1 之間的整數或者rand的輸出。若method設定為seed,則s 必須是一個0 到231-2 之間的整數或者rand 的輸出。
2)S=rand(method)
它返回method指定的隨機數生成器的當前內部狀態,并不改變所用的生成器。
需要注意的是,隨機數生成器算法及初始狀態共同決定了所產生的隨機數序列,同樣的隨機數生成器算法設置為相同的初始狀態,則生成相同的隨機數。否則會生成不同的隨機數,而Matlab每次啟動時,都會重置rand函數的狀態,所以在改變輸入狀態值之前,每次與Matlab的會話中rand函數都會生成相同的隨機數序列。所以,實際上這個函數生成的是偽隨機數[5],其生成機制由隨機種子控制。如下例所示:
>> rand‘( twister,3);