999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

面向計算思維的蒙特卡羅C語言程序設計案例探究

2018-01-31 07:49:48顧麗紅丁淑妍
計算機教育 2018年1期
關鍵詞:計算機思維方法

顧麗紅,丁淑妍

(中國石油大學(華東) 計算機與通信工程學院,山東 青島 266580)

0 引 言

計算思維[1]概念由Jeannette M. Wing教授于2006年首次完整提出,隨后引起了國內計算機教育界的重視。教育部計算機專業教學指導委員會明確提出將計算思維列入計算機專業人才的專業基本能力[2]。如何培養非計算機專業大學生的計算思維能力,這是擺在大學計算機基礎教育工作者面前的難題。目前國內高校的C語言程序設計課程普遍存在注重知識基礎而忽視能力基礎的問題,能力的培養則需要引入更多能引起學生興趣的程序設計案例實踐[3-5]。近幾年相關的教研論文越來越多,大多以數值計算類為主,面向跨計算學科的廣義計算思維[6]的案例設計實踐類論文還不多見。計算機模擬通常綜合了計算機科學家和領域科學家的思維方式,在課程教學實踐中引入這類程序設計案例,有利于培養學生的計算思維能力。

1 計算思維與計算機模擬

進入信息和數據時代,計算思維是每個人的基本技能,就像邏輯思維、數學思維、設計思維一樣,是人們認識問題和解決問題的重要思維方式之一。計算思維能力是人們有意識地使用計算機科學家的思想、方法、技術、工具、資源、環境進行思考和活動的能力。如何全方位培養這種能力是教育工作者面臨的挑戰。

計算機模擬通常是指用抽象模型來模擬特定系統的計算機程序。人們在研究、設計、構造復雜系統時,往往需要設計制造一個模型來進行各種試驗。傳統方法是建立數學模型或實物模型,前者缺乏直觀性也不便于試驗,后者比較直觀但不夠經濟和方便。隨著計算機的出現和處理能力的不斷增強,利用計算機來模擬各種復雜系統,成為重要的科學研究手段。計算機模擬的一般過程如圖1所示。

其中,①數學建模與形式化。明確模擬工作的目標,確定模擬方案的評價準則。②模擬建模。根據問題特點和模擬要求從穩定性、精度和性能3個維度設計合適的算法。③程序設計。把模擬模型用計算機能執行的程序來描述。④模擬運行。分析運行結果是否合適,通過前幾步查找問題,不斷修正,直到結果滿意。⑤模擬實驗和結果處理。每一個方案,采用不同隨機數序列重復多次,采用數理統計方法分析模擬結果的統計特征;不同方案,采用相同隨機數序列進行模擬運行,消除因隨機數序列不同而引起的差異;模擬結果圖形化、可視化,乃至虛擬現實環境。

圖1 計算機模擬的一般處理過程

計算機模擬的設計原則包括:①分級模擬原則。采用與任務匹配的模型或算法,合理簡化問題,突出問題的關鍵。②效率兼顧原則。在模擬的不同階段,合理調整對準確度和速度的要求,提高模擬效率。③可信驗證原則。所有模擬結果應該有可信的驗證方法或依據。

在教學實踐中,讓學生充分理解計算機模擬過程中的算法構建、迭代修正、數理統計方法,以及結果圖形化和可視化的重要性,在提升學生興趣的實踐中培養能力。

2 蒙特卡羅方法思想

蒙特卡羅方法是一種隨機模擬方法,以概率和統計理論方法為基礎,使用隨機數(偽隨機數)解決計算問題,又稱為統計模擬法。因其具有概率統計特征而獲得數學家馮·諾依曼用賭城蒙特卡羅來命名。蒙特卡羅方法起源于1777年法國數學家蒲豐(Buffon)提出用投針試驗計算圓周率π,進而推廣到用概率法計算不規則圖形面積,甚至用小規模抽樣調查進行民意測驗,來預測競選的優勝者,也是同樣的思想。當然科學計算中的問題比這復雜很多,比如金融領域的交易風險評估,問題的維數(隨機變量的個數)高達數百、幾千,問題的難度成指數增長,傳統數值方法難以勝任,而蒙特卡羅方法因計算復雜性不依賴于維數則可以很好地對付維數災難。

蒙特卡羅方法具有簡單、快速、節省存儲單元的優點,省卻了一般人難以掌握的復雜的數學推導和演算過程,而且不受問題的幾何形狀復雜性影響,適用于處理大型復雜問題。隨著計算機處理復雜系統的能力日益增強,蒙特卡羅方法的應用也越來越廣泛。它不僅較好地解決了多重積分計算、微分方程求解、積分方程求解、特征值計算和非線性方程組求解等高難度和復雜的數學計算問題,而且在計算物理學、核物理、金融工程學、宏觀經濟學、生物醫學、可靠性及計算機科學等廣泛的領域都得到成功的應用。

在教學實踐中,通過引入蒲豐投針問題和不規則面積計算問題,學生對蒙特卡羅方法思想有了濃厚的興趣,為之后的C語言算法設計思想的養成打下基礎。

3 蒙特卡羅模擬案例設計

蒙特卡羅模擬的基本思想:當所求問題的解是某個事件的概率,或是某個隨機變量的數學期望,或是與概率、數學期望有關的量時,通過某種試驗的方法,得出該事件發生的頻率或者該隨機變量的若干個具體觀察值的算術平均值,進而得到問題的解。采用蒙特卡羅方法進行計算機模擬的步驟:首先設計反映系統各部分運行時邏輯關系的邏輯框圖(模擬模型),然后通過具有各種概率分布的模擬隨機數來模擬隨機現象。

3.1 3種蒙特卡羅π的計算模擬

法國數學家蒲豐于18世紀提出投針問題:設有一個以平行且等距木紋鋪成的地板,現在隨意拋一支長度比木紋之間距離小的針,求針和其中一條木紋相交的概率,并以此概率可以近似計算圓周率。

蒲豐投針問題的數學建模:平行線距離為2a,針的長度為2l,且l≤a。設針投到地面上是隨機的,所以位置可以用二維隨機變量(x,θ)來描述,x為針中心的坐標,θ為針與平行線的夾角。任意投針,就是意味著x與θ都是任意取的,但x的范圍限于[0,a],夾角θ的范圍限于[0, π]。在此情況下,針與平行線相交的數學條件是:x≤l×sinθ。x和θ均服從均勻分布,且相互獨立,通過(x,θ)的概率密度函數求出概率分布:P= 2l/πa,所以π的近似值為:2l/aP。

蒲豐投針C語言算法設計思路:

(1)隨機生成一個介于[0,a]表示針中心坐標的數x和一個介于[0, π]表示針與平行線的角度y;

(2)如果x≤l×siny,則表示針與平行線相交;

(3)計算π的近似值。

C語言程序設計實現如下:

蒲豐投針實驗的重要性在于它是第一個用幾何形式表達概率問題的例子,開創了使用隨機數處理確定性數學問題的先河。在教學實踐中,蒲豐實驗問題新穎奇妙,引起學生極大的興趣。為了達到舉一反三的效果,案例設計中引出蒙特卡羅思想計算π的另外兩種解法:圓中投點(幾何法)和隨機數互質法。

圓中投點問題描述:有一正方形木板,以及內切正方形內接圓盤,隨機向正方形中投點,求點落在圓盤中的概率,并以此概率近似計算圓周率。

圓中投點數學建模:有一個以(0, 0)為中心的邊長為2的正方形,以及這個正方形中半徑為1的內接圓,隨機向正方形中投點,求點落在內接圓中的概率。設點投到木板上是隨機的,所以位置可以用二維隨機變量(x,y)來描述。任意投點,就是意味著x與y都是任意取的,二者的范圍限于[0, 1]。在此情況下,落在內接圓中的數學條件是:x2+y2≤ 1。x和y均服從均勻分布,且相互獨立,求出概率分布:P= π/4,所以π的近似值為:4×P。

圓中投點C語言算法設計思路:

(1)隨機生成兩個介于[0, 1]區間的表示點坐標的x和y;

(2)如果x2+y2≤1,則表示點落在內接圓中;

(3)計算π的近似值。

C語言程序設計實現如下:

隨機數互質問題描述:R·查特在1904年發現,兩個隨意寫出的數中,互質的概率為6/π2,并以此概率近似計算圓周率。

隨機數互質數學建模:任意產生兩個整數x和y,x和y均服從均勻分布,且相互獨立,通過數學推導(推導過程較復雜)可以求出x和y互質的概率為:P= 6/π2,所以π的近似值為6/P的算術平方根。

隨機數互質C語言算法設計思路:

(1)隨機生成兩個介于[0, 32 767)的x和y;

(2)如果x和y互為質數,則統計變量累加1(注意特別處理生成數0的情況);

(3)計算π的近似值。

C語言程序設計實現如下:

測試實驗的硬件環境:Intel i5 M540處理器,主頻2.53GHz,雙核四線程,3MB高速緩存。軟件環境:Window7旗艦版,CodeBlock 13.12 IDE環境,TDM-GCC v4.8.1編譯器。為了盡可能減少其他應用程序對測試的干擾,測試前盡可能關閉開機啟動項的應用軟件,比如殺毒軟件、下載工具等,并禁用網絡。采用多次測試取均值的方法可以降低測試誤差,本實驗取10次測試的平均值,實驗結果如表1。

眾所周知,圓周率π的真值在3.141 592 6和3.141 592 7之間,假設以中間值3.141 592 65為真值,我們發現當模擬的次數N為千萬次和億次的誤差分別為: 0.438‰和0.048‰, 0.235‰和0.023‰, 0.071‰和0.030‰,π的精度有了明顯的提高;當N為10億次時,精度沒有明顯提升,求更高精度的π需要尋求其他方法。蒙特卡羅方法的收斂速度與N的算術平方根成比例,意味著要使結果精度提高一位,應該增加一百倍的模擬計算工作量。

3.2 4種概率分布的隨機變量模擬

蒙特卡羅方法需要模擬隨機事件,即需要隨機數,那么計算機是如何產生隨機數的呢?隨機數是來自統計學的概念,真正的隨機數(真隨機數)是使用物理現象產生的,比如常見的彩票的搖號、擲錢幣、骰子、轉輪等,密碼學領域需要真隨機數。目前計算機產生的隨機數,是通過一個固定的、可以重復的算法產生,不是真正的隨機,但是具有類似于隨機數的統計特征,通常稱為偽隨機數,可以滿足蒙特卡羅方法的要求,所以默認計算機產生的隨機數是隨機的。

用蒙特卡羅方法模擬系統或過程時,需要不同概率分布的隨機數,通常先生成均勻分布的(0, 1)隨機數,這是其他分布隨機數的基礎。理論上說,具有連續分布的隨機數,通過數學變換或近似等方法,可以生成其他任意分布的隨機數。設μi(i=1, 2, …)是區間[0, 1]內的均勻分布的獨立隨機變量,而另一給定分布函數F(x)的隨機變量為則這一隨機變量xi可以由其反分布函數求得其抽樣值,即

均勻分布隨機變量算法設計思路:已知連續型隨機變量在有限區間內取值,則其概率密度函數為其分布函數為知所以

指數分布隨機變量算法設計思路:已知連續型隨機變量在有限區間內取值,則其概率密度函數為故其分布函數為知若(1-μ)是(0, 1)均勻分布隨機數,則可用下式簡化為

正態分布隨機變量算法設計思路:已知連續型隨機變量服從正態分布N(μ, σ2),其概率密度函數為取區間(0, 1)上兩個均勻分布隨機數μ1和μ2,利用二元函數變換可得到個獨立的標準正態分布隨機變量。

表1 三種蒙特卡羅π的計算模擬結果

泊松分布隨機變量算法設計思路:泊松分布源自二項分布,在二項分布的伯努利試驗中,如果試驗次數n很大,二項分布的概率p很小,且乘積λ=np比較適中,則事件出現的次數的概率可以用泊松分布來逼近。泊松分布是離散型概率分布,表示固定尺度的連續區間上給定的事件發生次數的概率,其中n可以看作無窮大,泊松分布單位時間內隨機事件發生的次數滿足泊松分布,比如電話交換機接收到呼叫的次數、汽車站臺的候客人數、機器出現故障的次數、自然災害發生的次數、DNA序列的變異數等。

在C語言程序設計中,利用計算機產生的均勻分布隨機數,通過概率積分變換算法可以比較容易得到滿足其他概率分布的隨機變量。C語言中產生隨機數,通常用到兩個函數:srand()和rand()。srand()用來為計算機產生隨機數設置seed種子,否則每次程序運行產生的隨機數序列是一樣的。避免這種情況的通常方法是采用計算機的當前時間作為seed種子,因為時間是在不斷變化的。rand()函數隨機生成滿足均勻分布的[0,RAND_MAX](RAND_MAX 為 0x7fff,即 32 767)之間的整數。如果要使范圍大一點,可以通過產生幾個隨機數的線性組合來實現任意范圍內的均勻分布隨機數,而且經過一定的四則運算和取模運算,可以比較容易地得到任意區間的隨機變量,比如:均勻分布、指數分布、正態分布和泊松分布。

產生高精度均勻分布隨機數。用rand()函數產生隨機數,需要對精度有所認知。rand()的隨機數分辨率為32 767,兩個也就是65 534,如果需要要產生(-1 000, 1 000)之間且精度為4位小數點的均勻分布,則分辨率要求為1 000×10 000×2=20 000 000,這樣顯然遠遠不夠,但可以用兩個隨機數的乘法來達到精度要求,C語言程序設計片段如下。

利用[0, 1]區間的均勻分布可以產生指數分布隨機數,C語言程序設計片段如下。

利用[0, 1]區間的均勻分布可以產生正態分布隨機數(Box Muller方法),C語言程序設計片段如下。

利用[0, 1]區間的均勻分布可以產生泊松分布隨機數,Knuth算法設計思路:

1)l賦初值e-λ,k賦初值0,p賦初值1.0;

2)生成(0, 1)區間均勻分布隨機數u,p賦值為p*u,k累加1;

3)如果p>l,則重復2),直至不滿足條件;

4)返回k-1。

C語言程序設計片段如下:

實驗軟硬件環境同上,實驗結果如圖2(頻率曲線圖)。

從4種分布的頻率曲線圖可以看出,通過線性組合和四則運算,計算機產生的偽隨機數可以滿足蒙特卡羅方法的要求,在實際生產、生活和工程項目中可以大量應用。

4 結 語

蒙特卡羅模擬有很多專門的工具軟件,比如Mathmetica、MatLab、SPSS、CrystalBall等,其功能強大且容易使用。本文僅從C程序設計課程教學和實踐環節的需要,提出通過計算機模擬隨機事件引導學生對計算思維的認知和培養學生動手實踐的能力。大數據時代需要培養更多理解概率論和數理統計原理的融合型復合人才,建議大學計算機基礎課程教學工作者根據學生的專業背景設計更多跨學科領域且體現計算思維思想的案例庫進行交流和分享。下一步將在本文工作的基礎上,從大數據分析的角度,研究設計諸如投資風險分析、隨機庫存預測等進一步培養計算思維理能力的綜合型教學案例。

圖2 計算機生成的4種分布隨機數的頻率曲線圖

[1]Wing J M. Computational thinking[J]. Communications of the ACM, 2006, 49(3): 33-35.

[2]教育部高等學校計算機科學與技術教學指導委員會. 高等學校計算機科學與技術專業人才專業能力構成與培養[M]. 北京: 機械工業出版社, 2010.

[3]顧麗紅, 李傳秀, 吳少剛. 培養計算思維能力的矩陣乘法C語言程序設計案例探究[J]. 計算機教育, 2016(1): 149-152.

[4]姚天昉. 在程序設計課程中引入“計算思維”的實踐[J]. 中國大學教學, 2012(2): 61-62.

[5]陳文智, 陳越, 莊越挺. 面向系統設計能力培養的教學改革探索[J]. 計算機教育, 2013(20): 70-76.

[6]蔣宗禮. 計算思維之我見[J]. 中國大學教學, 2013(9): 5-10.

猜你喜歡
計算機思維方法
思維跳跳糖
思維跳跳糖
思維跳跳糖
思維跳跳糖
計算機操作系統
基于計算機自然語言處理的機器翻譯技術應用與簡介
科技傳播(2019年22期)2020-01-14 03:06:34
信息系統審計中計算機審計的應用
消費導刊(2017年20期)2018-01-03 06:26:40
用對方法才能瘦
Coco薇(2016年2期)2016-03-22 02:42:52
四大方法 教你不再“坐以待病”!
Coco薇(2015年1期)2015-08-13 02:47:34
捕魚
主站蜘蛛池模板: 午夜国产小视频| 国产精品亚洲天堂| 重口调教一区二区视频| 少妇高潮惨叫久久久久久| 日韩精品毛片| 欧美特级AAAAAA视频免费观看| 色综合中文综合网| 中文字幕有乳无码| 天堂av高清一区二区三区| 亚洲精品男人天堂| 久久人体视频| 国产网站一区二区三区| 99热国产在线精品99| 萌白酱国产一区二区| 在线视频精品一区| 成人夜夜嗨| 亚洲视频一区| 国产激情无码一区二区三区免费| 中文字幕1区2区| 国产成人综合亚洲网址| 精久久久久无码区中文字幕| 好紧好深好大乳无码中文字幕| 日韩少妇激情一区二区| 久久国产高潮流白浆免费观看| 精久久久久无码区中文字幕| 国产精品播放| 中文字幕无码制服中字| 特级毛片免费视频| 国产不卡一级毛片视频| 婷婷综合亚洲| av一区二区三区高清久久| 国产最爽的乱婬视频国语对白| 美女国产在线| 亚洲中文字幕av无码区| 看国产毛片| 91精品国产自产91精品资源| 91热爆在线| 91麻豆精品国产高清在线| 人妻丝袜无码视频| 久久综合结合久久狠狠狠97色| 五月天丁香婷婷综合久久| 色噜噜综合网| 露脸国产精品自产在线播| 亚洲日韩精品无码专区97| 一本一道波多野结衣av黑人在线| 一区二区理伦视频| 欧类av怡春院| 久久精品中文字幕少妇| 99热线精品大全在线观看| 一本久道久久综合多人 | 成人毛片免费观看| 一级全黄毛片| 国产96在线 | 国产精品女主播| 午夜福利视频一区| 久久久噜噜噜| 国产成人综合亚洲欧洲色就色| 欧美日本视频在线观看| 国内精品久久久久久久久久影视| 亚洲成人在线免费| 欧美国产在线精品17p| 亚洲精品国产综合99| 91福利片| 国产精品免费入口视频| 一级香蕉视频在线观看| 多人乱p欧美在线观看| 国产精品自在拍首页视频8 | 国产午夜无码片在线观看网站| 99在线观看国产| 思思热精品在线8| 免费无遮挡AV| 亚洲精品无码专区在线观看 | 国产精品分类视频分类一区| 国语少妇高潮| 亚洲国产午夜精华无码福利| 日韩123欧美字幕| 一级一级一片免费| AV在线麻免费观看网站 | 91小视频在线| 日韩高清欧美| 中文字幕无线码一区| 亚洲精品在线影院|