![基于Matlab語言的Monte Carlo入門教程_第1頁](http://file4.renrendoc.com/view/6ff78aec24f8360a5d55127d5c9edb25/6ff78aec24f8360a5d55127d5c9edb251.gif)
![基于Matlab語言的Monte Carlo入門教程_第2頁](http://file4.renrendoc.com/view/6ff78aec24f8360a5d55127d5c9edb25/6ff78aec24f8360a5d55127d5c9edb252.gif)
![基于Matlab語言的Monte Carlo入門教程_第3頁](http://file4.renrendoc.com/view/6ff78aec24f8360a5d55127d5c9edb25/6ff78aec24f8360a5d55127d5c9edb253.gif)
![基于Matlab語言的Monte Carlo入門教程_第4頁](http://file4.renrendoc.com/view/6ff78aec24f8360a5d55127d5c9edb25/6ff78aec24f8360a5d55127d5c9edb254.gif)
![基于Matlab語言的Monte Carlo入門教程_第5頁](http://file4.renrendoc.com/view/6ff78aec24f8360a5d55127d5c9edb25/6ff78aec24f8360a5d55127d5c9edb255.gif)
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
前言與說明—、MonteCarlo方法是一門簡單而復雜的學問MonteCarlo方法往小的方面說很簡單,就是生成一堆隨機數(shù),然后以某函數(shù)規(guī)則計算出一堆數(shù)值,最后求這些數(shù)值的平均值就得到了結果;往大的方面說卻很復雜,要將蒙特卡洛做好需要考慮的問題很多,例如:需要解決的問題是否收斂倘若不收斂,MonteCarlo方法就不能用,不然計算出來的結果有何意義,只有老天才知道;所選用的具體方法收斂速度如何一一雖然幾乎所有MonteCarlo收斂階數(shù)為1/2,但不同的方法收斂階數(shù)前面的系數(shù)不同;所得解的誤差是多少——MonteCarlo方法從來得不到精確值,而是一個近似的隨機變量,因此,任何時候,報告MonteCarlo解時,需要同時報告該解的方差;如何選擇具體算法,以加快速度MonteCarlo模擬需要較長時間,所以速度很重要。尤其是你使用MonteCarlo方法實時計算金融產(chǎn)品價格時,時間就是金錢。加快MonteCarlo速度有很多或大或小的技巧,而且這些技巧還要依據(jù)不同問題而定。偽隨機數(shù)問題一一計算機生成的隨機數(shù)都是偽隨機數(shù),很多MonteCarlo書中都大書特書偽隨機數(shù)的危害以及如何生成盡可能“真”的偽隨機數(shù)。有此告誡在,我們自然不能對偽隨機數(shù)問題視而不見,但是我們是否就要因這一問題惶惶不可終日呢?模型與現(xiàn)實——模型是我們的理想,但是現(xiàn)實中的市場卻是殘酷的。如果有人僅僅拿著書本就沖進市場,那他必然還要交高昂的學費,最終鮮血淋漓地出來。同理,MonteCarlo方法(以及其他幾乎所有方法),任何時候都只能給我們作參考。然而,我們卻可以以科學的態(tài)度和方法使用MonteCarlo方法,以使其結果更加貼近現(xiàn)實,參考價值更大。二、本課程將解決的問題作為一門針對非學術人士的入門性質的課程,本課程最注重的是基礎的應用性知識。在接下來,我會詳細講述MonteCarlo方法本身,且為了確保大家看懂,我會精選一些例子,從這些例子的數(shù)學推導,到算法描述,到程序設計,到誤差分析,這些基礎過程都將涉及。尤其考慮到我見過的不少人(尤其是論壇上的不少網(wǎng)友),編程基礎比較薄弱,所以在講解程序時我會逐句分析,至少確保你能看懂這個程序的每個步驟。另一方面,入門課程還肩負為大家未來學習奠定基礎的重要使命,故課程中要覆蓋各個方面的內容,例如上一節(jié)所提到的都或多或少有所覆蓋。但是,正是因為這是一個入門性質的課程,很多的內容無法涉及,同時很多有所涉及的內容也無法充分展開。具體在下文中涉及到相關內容時我會盡量提供進一步學習的方向、方法等延伸性問題。這里值得一提的是上文所提及的模型與現(xiàn)實的問題。本課程中的例子基本都是理論化的例子,這樣的例子好處在于它簡化了很多復雜的現(xiàn)實狀況,對于初學者而言容易上手,也便于教授MonteCarlo方法如何使用,同時它還是解決現(xiàn)實問題的基礎。所以,要特別注意,我在課程中講的那些金融工具定價的例子都是理論化的例子,千萬不要以為學會那些之后就已經(jīng)學會了現(xiàn)實中的金融產(chǎn)品的定價,套用一句廣告詞:“才剛剛開始呢”。三、章節(jié)設置常見的MonteCarlo書籍包含如下內容:隨機數(shù)的生成、特定分布抽樣、優(yōu)化(降低方差)技巧、隨機過程模擬、MonteCarlo方法實際應用、以及擴展(主要是Quasi-MonteCarlo,即擬蒙特卡洛方法)本教程覆蓋隨機數(shù)生成、特定抽樣分布、隨機過程模擬和應用實例。但和那些書籍不同在于如下這些方面:不詳細講偽隨機數(shù)問題——我們用Matlab內附帶的隨機數(shù)生成器,將偽隨機數(shù)問題留給Mathworks的專家吧不講降低方差技巧一一降低方差技術講的是怎樣更快地作MonteCarlo,而這是入門教程,目的在教會你怎樣做MonteCarlo,如果你還不會做就去學怎樣可以做得更快那沒有意義。所以,先學會基本使用方法最重要,優(yōu)化的問題在熟練后再講述就水到渠成了。特定分布抽樣會講很多有用的技巧,例如RejectMethod、條件分布方法、協(xié)方差陣、Copula等方法生成聯(lián)合分布隨機變量,但是如果講述太深,每個內容都可以寫一本書了,所以不會講太深,只講用的最多的那很少一部分內容。并行MonteCarlo――很多入門的書上不會講這個,但是這個課程里面會專門用一章講,更詳細介紹見本章倒數(shù)第三小節(jié)。四、課程的教授模式本課程中每個知識點基本按照如下步驟展開:主要介紹與知識點息息相關的基礎知識,例如公式的數(shù)學推導、概念的含義、Matlab語句基礎、計算機相關知識等等。這樣做最大的作用是幫助大家回憶這些內容,以便與主體內容展開相銜接。由于這并非主旨所在,所以不會在其上花費過多筆墨。若你從未接觸過這些基礎知識,你要是看一遍課程中的簡介就懂了自然最好,若不懂,則建議翻閱相應的參考書籍。我會在課程講義最后附上我寫作本課程講義所用到的所有參考書目。(由于我習慣看英文原版書,所以此教程的參考書目大多數(shù)是英文書籍)(二)主體內容不必多言,就是知識點的展開。(三)相關例子每個知識點后面我會附上一些與其有關的簡單的例子。任何知識、方法都有它自身的局限,所以僅僅知道方法怎么做還不夠,還需要明白這些方法何時何地能用。從另一個角度來看,本課程主要包含如下資料:(一)講義就是你當前看到的這份資料。此資料覆蓋所有便于書寫的內容。而且,購買了視頻教程的網(wǎng)友將收到PDF版本的講義;同時這份講義還會以HTML網(wǎng)頁的形式掛在我的個人主頁(/),網(wǎng)頁教程可以直接打印,打印過程中非主要內容(如導航、廣告等)會自動隱藏。由于我的個人主頁是商業(yè)空間,需要大量的流量才能產(chǎn)生足以支持空間運營的廣告收入,所以請購買了視頻教程的網(wǎng)友不要在未經(jīng)我個人允許前提下將PDF講義等資料公布在網(wǎng)絡上,對此我保留追究法律責任的權力。特別需要指出一點:由于時間緊迫,寫作講義時文字不經(jīng)細細斟酌,雖然意思基本表達清楚,但中文語法錯誤在所難免。今后有時間會逐句修改,也歡迎大家?guī)兔πS?,具體做法是:保存當前網(wǎng)頁為html,用word打開網(wǎng)頁,另存為doc,之后再修訂文檔。(二)PPTPPT主要覆蓋一些公式性推導和一些我并不擁有完全版權的內容——有些比較獨特的知識、例子來自于我在北京大學的金融工程等課程,將其以電子版發(fā)布在網(wǎng)絡上會冒犯到為這些知識、例子付出很多心血的老師一一故PPT不會分發(fā)(無論是否購買視頻教程),但是會顯示在視頻中。觀眾通過暫停視頻的方式閱讀這些內容。(三)代碼MonteCarl。的代碼不是很復雜,但要寫出高質量的代碼卻不容易,所以對于大多數(shù)例子我會寫至少兩個版本代碼,一個是基礎版本,采用大家最熟悉的最基礎的Matlab語句來寫;另一個是優(yōu)化后的版本,這一版本將充分考慮Matlab特點進行優(yōu)化,但是它可能不那么容易讀懂。對于購買了視頻的網(wǎng)友,我會將PDF和代碼文件放在一個壓縮包中發(fā)送至你的郵箱,只要將此附件解壓縮即可得到代碼文件。視頻教程文件太大,我不可能找到足夠的免費空間來存放這些視頻文件,免費提供給大家觀看。故視頻教程將借助其他網(wǎng)站的空間。在我當前與人大經(jīng)濟論壇的合同結束前,此視頻教程由人大經(jīng)濟論壇獨家提供。具體的網(wǎng)址見:/Default.aspx?id=ll五、基礎知識要求雖然我會在每章開始部分很簡略地復習部分基礎概念,但是要順利完成此課程,請確保自己牢固掌握了如下知識。(一)數(shù)學基礎學習MonteCarlo必備基礎的概率論知識。隨機變量、PDF(隨機變量的概率分布)、CDF(隨機變量的累積分布)、聯(lián)合分布、條件分布、邊緣分布、COPULA、隨機微分方程(SDE)等等。而且不僅僅是知道這些概念是什么含義,還要會用、會算。不過也不用被這些嚇到,雖然我在相關章節(jié)講的內容比較深,這些知識都全要用到,但是里面最重要的知識只有一個,那就是正態(tài)分布。你只要會熟練學習正態(tài)分布,就可以解決不少金融產(chǎn)品理論定價的問題。話說回來,必須指出,本教程里面涉及的數(shù)學相對于真正難的知識還只是入門,要做現(xiàn)實市場中的產(chǎn)品定價這些知識遠遠不夠。補充說明,大多數(shù)理論定價模型,例如BlackScholes模型,Black模型,為了推導簡便起見(當前也限于這些論文寫作時的計算機技術等外界因素),都只考慮正態(tài)分布;但是,在真實市場中,很多經(jīng)濟變量(例如股票收益率),可能符合白噪聲假設,但是一般不符合正態(tài)分布假設及獨立假設。總之,只掌握正態(tài)分布,理論模型基本不會有問題,卻不足以做真實市場的分析。(二)Matlab基本教程的某章中,我會簡略講講編程入門知識。但是Matlab的基本操作需要你自己去看。要求掌握程度可以參考我寫得Matlab簡明教程(/notes/matlab/)金融工程知識雖然這個教程沒有明確表明專門講金融產(chǎn)品定價,但是這里用了不少金融產(chǎn)品理論定價的例子來解說MonteCarlo方法,如果你對金融工程比較熟悉,那么看這些部分相對會更順利。即使不熟悉也沒關系,每個例子的開始部分,我會簡要解釋相關背景知識。由于需要講述Matlab實際操作,所以你應該熟悉Matlab軟件啟動退出,磁盤目錄概念;另外會講述并行MonteCarlo計算,所以你應該明白雙核概念,內存CPU等等基本知識總要懂一點的。其他的不要求。六、MonteCarlo并行計算這里還特別提一下并行計算?,F(xiàn)在雙核機器基本普及,還有不少網(wǎng)友的機器是三核甚至四核,如果能夠同時使用多個核心做計算,運算速度可以有顯著提升。幸運的是,MonteCarl。方法的特點使得它特別適合并行計算。所以,在這個教程中,我將用獨立的一章特別講述如何使用Matlab并行計算工具箱(ParallelComputingToolbox)做MonteCarlo模擬。我會先介紹并行計算的基礎知識(例如兩種主要的并行模式),以及會更詳細介紹Matlab并行計算工具箱的工作原理一一Matlab的并行計算并非標準的并行計算,必須了解其特點才能發(fā)揮并行計算優(yōu)勢,否則速度可能更慢。介紹完基礎知識,我將通過將此前各章的MonteCarlo例子改寫為并行計算代碼這種形式來講述MonteCarlo并行算法。之后,還將特別列出用Matlab做并行MonteCarlo的一些注意事項,并給出一些用以確保效率的簡要規(guī)則。七、關于回答疑問不論是否購買了視頻教程都可以通過郵件形式聯(lián)系我,我的Email地址在主()頁上及視頻教程中已標明。我很樂意就本課程相關的任何問題與大家交流。不過有幾點還請大家理解:由于我郵箱中垃圾郵件很多,所以你寫信時的書寫方式和內容盡量確保不要被Gmail當成垃圾郵件處理掉我事情比較忙,所以可能不能及時回信,還請見諒。有疑問可以通過郵件聯(lián)系我,也可以直接在論壇上相關板塊發(fā)帖咨詢。(我收郵件頻率一般高于上論壇頻率)在詢問我之前強烈建議你在講義、我主頁的FAQ欄目中查詢是否已有類似問題。提問一定要詳細具體,并附上詳盡的背景材料,那些飄渺無蹤影的問題實在令人無從下手!我回答問題的方式可能是直接給出代碼等解答,也可能是告知你從何處尋找相關信息以自己解決——即授人以魚和授人以漁這兩種方式我都有可能選擇。如果所提問題有很好的代表性,我將略去或更換你提問中涉及你個人情況的信息、數(shù)據(jù),然后將此問題的解答方法放置在課程主頁上,以便其它網(wǎng)友參考。我保證會很認真對待每位網(wǎng)友每個有意義的問題并會盡力去尋找答案,但我無法保證每個問題我都能回答。八、關于后續(xù)課程這個課程只講基礎。主要作用有兩個,一個是為更深課程提供一個入門途徑,這樣將來我要是講更深課程時就不必浪費時間講基礎知識了;另一個是投石問路,我的時間一直很緊張,此課程也是第一次和人大經(jīng)濟論壇合作,因此我需要看看市場反應再決定是否有必要花費大量時間準備延伸課程。如果結果顯示有足夠數(shù)量的網(wǎng)友對這方面的知識很感興趣(這個主要體現(xiàn)在視頻購買上哈哈),那么我可能考慮推出關于金融產(chǎn)品MonteCarlo定價的課程。在那個課程中,理論模型不再是主要內容,我會從現(xiàn)實出發(fā),從如何分析市場歷史數(shù)據(jù)以得到重要參數(shù),到如何建立各種模型,再到現(xiàn)實中各項應用等等。九、版權申明未經(jīng)本作者書面授權許可,本課程任何資料不得用于商業(yè)或盈利性用途。講義的PDF版本僅僅提供給購買了視頻教程的最終用戶,此講義可以復印,也可打印后分發(fā),但未經(jīng)作者本人書面許可,任何人不得散發(fā)講義PDF電子版。網(wǎng)頁版本的講義可下載,且在保證網(wǎng)頁文件未被認為修改情況下可以公開傳播,但考慮到我會時常更新網(wǎng)頁版本內容,強烈建議直接訪問課程網(wǎng)站。除上述兩種情章卜,任關料不得在未經(jīng)作者本人方面法概述下散發(fā)。講課人:XaeroChang|課程主頁:/notes/intro2mc本章主要概述MonteCarlo的一些基礎知識,另外包括一^最簡單的用MonteCarlo方法計算數(shù)值積分的例子。―、MonteCarlo歷史淵源MonteCarlo方法的實質是通過大量隨機試驗,利用概率論解決問題的一種數(shù)值方法,基本思想是基于概率和體積間的相似性。它和Simulation有細微區(qū)別。單獨的Simulation只是模擬一些隨機的運動,其結果是不確定的;MonteCarlo在計算的中間過程中出現(xiàn)的數(shù)是隨機的,但是它要解決的問題的結果卻是確定的。歷史上有記載的MonteCarlo試驗始于十八世紀末期(約1777年),當時布豐(Buffon)為了計算圓周率,設計了一個“投針試驗”。(后文會給出一個更加簡單的計算圓周率的例子)。雖然方法已經(jīng)存在了200多年,此方法命名為MonteCarlo則是在二十世紀四十年,美國原子彈計劃的一個子項目需要使用MonteCarlo方法模擬中子對某種特殊材料的穿透作用。出于保密緣故,每個項目都要一個代號,傳聞命名代號時,項目負責人之一vonNeumann靈犀一點選擇摩洛哥著名賭城蒙特卡洛作為該項目名稱,自此這種方法也就被命名為MonteCarlo方法廣為流傳。十一、Mo毗eCarlo方法適用用途一)數(shù)值積分計算一個定積分,如巾,如果我們能夠得到f(x)的原函數(shù)F(x),那么直接由表達式:F(x1)-F(x0)可以得到該定積分的值。但是,很多情況下,由于f(x)太復雜,我們無法計算得到原函數(shù)F(x)的顯示解,這時我們就只能用數(shù)值積分的辦法。如下是一個簡單的數(shù)值積分的例子。數(shù)值積分簡單示例如圖,數(shù)值積分的基本原理是在自變量x的區(qū)間上取多個離散的點,用單個點的值來代替該小段上函數(shù)f(x)值。常規(guī)的數(shù)值積分方法是在分段之后,將所有的柱子(粉紅色方塊)的面積全部加起來,用這個面積來近似函數(shù)f(x)(藍色曲線)與x軸圍成的面積。這樣做當然是不精確的,但是隨著分段數(shù)量增加,誤差將減小,近似面積將逐漸逼近真實的面積。MonteCarlo數(shù)值積分方法和上述類似。差別在于,MonteCarlo方法中,我們不需要將所有方柱的面積相加,而只需要隨機地抽取一些函數(shù)值,將他們的面積累加后計算平均值就夠了。通過相關數(shù)學知識可以證明,隨著抽取點增加,近似面積也將逼近真實面積。在金融產(chǎn)品定價中,我們接觸到的大多數(shù)求基于某個隨機變量的函數(shù)的期望值??紤]一個歐式期權,假定我們已經(jīng)知道在期權行權日的股票服從某種分布(理論模型中一般是正態(tài)分布),那么用期權收益在這種分布上做積分求期望即可。(五)隨機最優(yōu)化MonteCarlo在隨機最優(yōu)化中的應用包括:模擬退火(SimulatedAnnealing)、進化策略(Evolutionstrategy)等等。一個最簡單的例子是,已知某函數(shù),我們要求此函數(shù)的最大值,那么我們可以不斷地在該函數(shù)定義域上隨機取點,然后用得到的最大的點作為此函數(shù)的最大值。這個例子實質也是隨機數(shù)值積分,它等價于求此函數(shù)的無窮階范數(shù)?-Norm)在定義域上的積分。由于在金融產(chǎn)品定價中,這部分內容用的相對較不常見,所以此課程就不介紹隨機最優(yōu)化方法了。十二、MonteCarlo形式與一般步驟積分形式做MonteCarlo時,求解積分的一般形式是:AJgm功血X為自變量,它應該是隨機的,定義域為(xO,xl),f(x)為被積函數(shù),巾(x)是x的概率密度。在計算歐式期權例子中,x為期權到期日股票價格,由于我們計算期權價格的時候該期權還沒有到期,所以此時x是不確定的(是一隨機變量),我們按照相應的理論,假設x的概率密度為巾(x)、最高可能股價為x1(可以是正無窮)、最低可能股價為xO(可以是0),另外,期權收益是到期日股票價格x和期權行權價格的函數(shù),我們用f(x)來表示期權收益。(二)一般步驟我將MonteCarlo分為三加一個步驟:1.依據(jù)概率分布巾(X)不斷生成隨機數(shù)x,并計算f(x)由于隨機數(shù)性質,每次生成的x的值都是不確定的,為區(qū)分起見,我們可以給生成的x賦予下標。如Xj表示生成的第i個x。生成了多少個x,就可以計算出多少個f(x)的值將這些f(x)的值累加,并求平均值x,例如我們共生成了N個x,x,ai-l到達停止條件后退出常用的停止條件有兩種,一種是設定最多生成N個x,數(shù)量達到后即退出,另一種是檢測計算結果與真實結果之間的誤差,當這一誤差小到某個范圍之內時退出。有趣的類比:積分表達式中的積分符合類比為上式中累加符號,dx類比為1/N(數(shù)學知識告訴我們積分實質是極限意義下的累加;f(x)還是它自己,積分中的巾(x)可類比為依據(jù)巾(x)生成隨機數(shù)誤差分析MonteCarl。方法得到的結果是隨機變量,因此,在給出點估計后,還需要給出此估計值的波動程度及區(qū)間估計。嚴格的誤差分析首先要從證明收斂性出發(fā),再計算理論方差,最后用樣本方差來替代理論方差。在本課程中我們假定此方法收斂,同時得到的結果服從正態(tài)分布,因此可以直接用樣本方差作區(qū)間估計。詳細過程在例子中解釋。這個步驟的理論意義很重要,但在實際應用中,它的重要性有所淡化,倘若你的老板不太懂這些知識,你報告計算結果時可以只告訴他點估計即可。注意,前兩大步驟還可以繼續(xù)細分,例如某些教科書上的五大步驟就是將此處的前兩步細分成四步。十三、最簡單的例子舉個例子:2JeTdx:計算從孑函數(shù)從0到2的定積分值。數(shù)學方法:我們已知b的原函數(shù)是孑,那么定積分值就是:決=6.38905609893065。計算這個數(shù)值可以在Matlab中輸入代碼:exp(2)-exp(0)上面得到的值是此不定積分的真實值。常規(guī)數(shù)值積分:在區(qū)間內取n個點,計算各個點上的函數(shù)值,然后用函數(shù)值乘以每個區(qū)間寬度,最后相加。Matlab代碼:N=100;x=linspace(0,2,N);sum(exp(x).*2/N)試著調大N的值,你會發(fā)現(xiàn),最后的結果將更接近真實值。MonteCarlo數(shù)值積分法:在內隨機取N個點,計算各個點上的函數(shù)值,最后求這些函數(shù)值的平均值再乘以2(為何要乘以2在后面小節(jié)詳細講)。看Matlab代碼:N=100;x二unifrnd(0,2,N,l);mean(2*exp(x))同樣的,通過增大N,這種方法得到的結果也將越來越接近真實值。解釋3J1這個例子要求的積分形式是:,還不完全是形式,我們先做變2|換,,這里姑是f(x);1/2是巾(X),它表示,在取值范圍(0,2)區(qū)間內,x服從均勻分布。前一例子共三條語句,逐句解釋如下:N=100;設定停止條件,共做N次MonteCarlo模擬。x二unifrnd(0,2,N,l);按照(0,2)區(qū)間均勻分布概率密度對x隨機抽樣,共抽取N個X。此句相當于第一個步i驟中的前半部分。mean(2*exp(x))2*exp(x)作用是對每個x計算f(x)的值,共可得到N個值,這個相當于第一個步驟后半ii部分;Mean()函數(shù)的作用是將所有的f(x)加起來取平均值,相當于第二個步驟。i這段代碼中的停止條件隱含于N值設定中,它一次性生成N個x值,完成此次計算后整個程序就結束了。十四、MonteCarlo方法的優(yōu)點對比前面常規(guī)數(shù)值積分和MonteCarlo數(shù)值積分代碼,同樣數(shù)量的N值一一也就意味這幾乎相同的計算量常規(guī)數(shù)值積分結果的精確度要高于MonteCarlo數(shù)值積分的結果。那么,我們?yōu)楹芜€需要用MonteCarlo來算數(shù)值積分呢?答案的關鍵在于,常規(guī)數(shù)值積分的精度直接取決于每個維度上取點數(shù)量,維度增加了,但是每個維度上要取的點卻不能減少。在多重積分中,隨著被積函數(shù)維度增加,需要計算的函數(shù)值數(shù)量以指數(shù)速度遞增。例如在一重積分中,只要沿著x軸取N個點;ff—f/Oih巧一w)呎心乓一兀)臥旺=2—耳)要達到相同大小的精確度,在s重積分中,仍然需要在每個維度上取N個點,s個緯度的坐標相組合,共需要計算Ns個坐標對應的f()函數(shù)值。取點越多,會占用計算機大量內存,也需要更長運算時間,最終導致這種計算方法不可行!MonteCarlo方法卻不同,不管是積分有多少重,取N個點計算的結果精確度都差不多。因此,即使在一重積分的情形下,MonteCarlo方法的效率比不過常規(guī)數(shù)值積分,但隨著積分維度增加,常規(guī)數(shù)值積分的速度呈指數(shù)下降,MonteCarlo方法的效率卻基本不變。經(jīng)驗表明,當積分重數(shù)達到4重積分甚至更高時,MonteCarlo方法將遠遠優(yōu)于常規(guī)數(shù)值積分方法?,F(xiàn)在回到金融產(chǎn)品定價,歐式期權理論定價公式只需要一重積分,此時MonteCarlo方法的效果不明顯,但是如果我們考慮一個亞式期權:期限為1年期,期權價格基于此1年內每天某個時點時的價格,全年共252個交易日,這樣此亞式期權理論定價公式是一個252重積分。常規(guī)的數(shù)值積分方法,需要取N25個點,這個數(shù)有多大,你自己去計算一下就知道了(注意:N取值要遠遠大于2),常規(guī)數(shù)值積分方法不可行,只能用MonteCarlo。綜上,如果計算高維度多重積分,如路徑依賴的exoticoptions(奇異期權)等金融產(chǎn)品定價,我們一般用的方法都是MonteCarlo。十五、MonteCarlo方法原理(選讀)MonteCarlo方法計算的結果收斂的理論依據(jù)來自于大數(shù)定律,且結果漸進地(Asymptotically)服從正態(tài)分布的理論依據(jù)是中心極限定理。以上兩個屬性都是漸進性質,要進行很多次抽樣,此屬性才會比較好地顯示出來,如果MonteCarlo計算結果的某些高階距存在,即使抽樣數(shù)量不太多,這些漸進屬性也可以很快地達到。這些原理在理論上意義重大,但由于我們一般遇上的MonteCarlo問題都是收斂的、結果也都是漸進正態(tài)分布,所以工作中使用時可以不加考慮。詳細第二章:隨機數(shù)的生成講課人:XaeroChang|課程主頁:/notes/intro2mc本章第一節(jié)會簡要復習隨機變量的一些概念,但學習本章最好要有一定的數(shù)學基礎。第二節(jié)主要介紹如何生成一維概率分布的隨機數(shù),第三節(jié)介紹如何生成高維分布的隨機數(shù)。最后略提及偽隨機數(shù)問題的應對策略?!?…-…—-…-…—-…-…—-…-…—_"iS…—-…-…—-…-…—-…-…—由前文可知,MonteCarlo積分解決的問題形如,f(x)值只需由x值決定,因此此處最重要的就是如何生成服從巾(x)概率分布的隨機數(shù)??梢哉f,正確生成隨機數(shù),MonteCarlo方法就做完了一半。一、隨機變量基本概念(一)隨機變量現(xiàn)實世界中有很多可以用數(shù)字來衡量的事物,站在當前時間點來看,它們在未來時刻的值是不確定的。例如,我們擲一骰子,在它停穩(wěn)前,我們不可能知道擲出多少點(傳說中的賭王除外,哈哈);例如某只股票在明天的股價,沒有人能準確知曉第二天股票的價格(不然他就發(fā)慘了?。?。但是,我們卻可以描述這些事物未來各種值的可能性。(二)離散型隨機變量
離散型隨機變量最重要的是分布律,即每個取值的概率是多少。例如擲骰子,我們認為扔出任何一個點的概率都是1/6。那么擲骰子得到的點數(shù)的分布律如下表:骰子點數(shù)123456概率1/61/61/61/61/61/6連續(xù)性隨機變量連續(xù)型隨機變量有兩個重要的概念。概率密度函數(shù)(PDF)和累積概率分布函數(shù)(CDF),具體定義見數(shù)學書籍。PDF函數(shù)本身不是概率,只有對x的某段區(qū)間中的PDF積分得到的數(shù)值才有概率的含義。CDF是概率的意思,點x上CDF的值表示該隨機變量可能取值小于x的概率的大小。如圖是正態(tài)分布的PDF和CDF多元分布在這個課程里面,我不將多維的隨機變量拆分成多個一維的隨機變量來表述,而是將各個維度組合成一個隨機變量向量。多元隨機變量分布需要掌握聯(lián)合分布、邊緣分布和條件分布。聯(lián)合分布和單變量PDF類似,如果將其對隨機變量某個取值范圍做積分就可以得到隨機變量最終取值落在該區(qū)間內的概率。邊緣分布是只考慮多維隨機變量中的某一維,其他維度不考慮情況下的PDF條件分布是固定隨機變量在其他維度的取值,再考慮剩余那個維度上的PDF。如圖是一個二維正態(tài)分布(兩個維度間相關系數(shù)為0.3)的示意圖。兩個小圖分別是第一和第二維度的邊緣分布PDF圖(都是標準正態(tài)分布PDF)。右上角的大圖是依據(jù)此二維正態(tài)聯(lián)合分布生成的隨機數(shù)。從隨機數(shù)的疏密程度可以看出聯(lián)合分布PDF函數(shù)在該區(qū)域的大小。研究這些分布不是我們的目的,只是達到目的的手段。我們所需要做的事情是生成符合各種分布的隨機數(shù)。由分布的不同類型一一連續(xù)型和離散型,常規(guī)型(Matlab中有內置函數(shù))和特殊型(Matlab中無內置函數(shù)),一維分布和多維分布一一我們接下來就各種情況分別講述如何在Matlab中生成各種各樣的隨機數(shù)。十六、一維隨機數(shù)兩個注意事項:生成隨機數(shù)有兩種選擇,可以每次只生成一個隨機數(shù),直接用此數(shù)計算f(x),然后循環(huán)重復此過程,最后求平均值;另一種方法是每次生成全部循環(huán)所需的隨機數(shù),利用Matlab矩陣運算語法計算f(x),不需要寫循環(huán),直接即可求平均值。前一種方法代碼簡單,但速度慢;后一種方法代碼相對更難寫。此處一定要掌握如何生成隨機數(shù)組成的向量和矩陣(單個隨機數(shù)就是一個1*1的矩陣),在后面章節(jié)的例子里面一般會有兩個版本的代碼分別講述這兩種生成方法。生成了一維的隨機數(shù)后,可以用hist()函數(shù)查看這些數(shù)服從的大致分布情況?;倦S機數(shù)Matlab中有兩個最基本生成隨機數(shù)的函數(shù)。rand()生成(0,1)區(qū)間上均勻分布的隨機變量?;菊Z法:rand([M,N,P...])生成排列成M*N*P...多維向量的隨機數(shù)。如果只寫M,則生成M*M矩陣;如果參數(shù)為[M,N]可以省略掉方括號。一些例子:rand(5,l)%生成5個隨機數(shù)排列的列向量,一般用這種格式rand(5)%生成5行5列的隨機數(shù)矩陣rand([5,4])%生成一個5行4列的隨機數(shù)矩陣生成的隨機數(shù)大致的分布。x=rand(100000,l);hist(x,30);由此可以看到生成的隨機數(shù)很符合均勻分布。(視頻教程會略提及hist()函數(shù)的作用)2.randn()生成服從標準正態(tài)分布(均值為0方差為1)的隨機數(shù)?;菊Z法和rand()類似。randn([M,N,P...])生成排列成M*N*P...多維向量的隨機數(shù)。如果只寫M,則生成M*M矩陣;如果參數(shù)為[M,N]可以省略掉方括號。一些例子:randn(5,l)%生成5個隨機數(shù)排列的列向量,一般用這種格式randn(5)%生成5行5列的隨機數(shù)矩陣randn([5,4])%生成一個5行4列的隨機數(shù)矩陣生成的隨機數(shù)大致的分布。x二randn(100000,l);hist(x,50);由圖可以看到生成的隨機數(shù)很符合標準正態(tài)分布。連續(xù)型分布隨機數(shù)如果你安裝了統(tǒng)計工具箱(StatisticToolbox),除了這兩種基本分布外,還可以用Matlab內部函數(shù)生成符合下面這些分布的隨機數(shù)。3.unifrnd()和rand()類似,這個函數(shù)生成某個區(qū)間內均勻分布的隨機數(shù)?;菊Z法unifrnd(a,b,[M,N,P,...])生成的隨機數(shù)區(qū)間在(a,b)內,排列成M*N*P...多維向量。如果只寫M,則生成M*M矩陣;如果參數(shù)為[M,N]可以省略掉方括號。一些例子:unifrnd(-2,3,5,l)%生成5個隨機數(shù)排列的列向量,一般用這種格式unifrnd(-2,3,5)%生成5行5列的隨機數(shù)矩陣unifrnd(-2,3,[5,4])%生成一個5行4列的隨機數(shù)矩陣%注:上述語句生成的隨機數(shù)都在(-2,3)區(qū)間內.生成的隨機數(shù)大致的分布。x=unifrnd(-2,3,100000,l);hist(x,50);由圖可以看到生成的隨機數(shù)很符合區(qū)間(-2,3)上面的均勻分布。4.normrnd()和randn()類似,此函數(shù)生成指定均值、標準差的正態(tài)分布的隨機數(shù)。基本語法normrnd(mu,sigma,[M,N,P,...])生成的隨機數(shù)服從均值為mu,標準差為sigma(注意標準差是正數(shù))正態(tài)分布,這些隨機數(shù)排列成M*N*P...多維向量。如果只寫M,則生成M*M矩陣;如果參數(shù)為[M,N]可以省略掉方括號。一些例子:normrnd(2,3,5,l)%生成5個隨機數(shù)排列的列向量,一般用這種格式normrnd(2,3,5)%生成5行5列的隨機數(shù)矩陣normrnd(2,3,[5,4])%生成一個5行4列的隨機數(shù)矩陣%注:上述語句生成的隨機數(shù)所服從的正態(tài)分布都是均值為2,標準差為3.生成的隨機數(shù)大致的分布。x二normrnd(2,3,100000,l);hist(x,50);分布,下半部分是用小節(jié)“randn()”中最后那段語句生成10萬個標準正態(tài)分布隨機數(shù)的大致分布。注意到上半個圖像的對稱軸向正方向偏移(準確說移動到x=2處),這是由于均值為2的結果。而且,由于標準差是3,比標準正態(tài)分布的標準差(1)要高,所以上半部分圖形更胖(注意x軸刻度的不同)。chi2rnd()此函數(shù)生成服從卡方(Chi-square)分布的隨機數(shù)。卡方分布只有一個參數(shù):自由度V。基本語法chi2rnd(v,[M,N,P,...])生成的隨機數(shù)服從自由度為v的卡方分布,這些隨機數(shù)排列成M*N*P...多維向量。如果只寫M,則生成M*M矩陣;如果參數(shù)為[M,N]可以省略掉方括號。一些例子:chi2rnd(5,5,l)%生成5個隨機數(shù)排列的列向量,一般用這種格式chi2rnd(5,5)%生成5行5列的隨機數(shù)矩陣chi2rnd(5,[5,4])%生成一個5行4列的隨機數(shù)矩陣%注:上述語句生成的隨機數(shù)所服從的卡方分布的自由度都是5生成的隨機數(shù)大致的分布。x=chi2rnd(5,100000,l);hist(x,50);frnd()此函數(shù)生成服從F分布的隨機數(shù)。F分布有2個參數(shù):v1,v2?;菊Z法frnd(vl,v2,[M,N,P,...])生成的隨機數(shù)服從參數(shù)為(vl,v2)的卡方分布,這些隨機數(shù)排列成M*N*P...多維向量。如果只寫M,則生成M*M矩陣;如果參數(shù)為[M,N]可以省略掉方括號。一些例子:frnd(3,5,5,l)%生成5個隨機數(shù)排列的列向量,一般用這種格式frnd(3,5,5)%生成5行5列的隨機數(shù)矩陣frnd(3,5,[5,4])%生成一個5行4列的隨機數(shù)矩陣%注:上述語句生成的隨機數(shù)所服從的參數(shù)為(v1=3,v2=5)的F分布生成的隨機數(shù)大致的分布。x=frnd(3,5,100000,l);hist(x,50);從結果可以看出來,F(xiàn)分布集中在x正半軸的左側,但是它在極端值處也很可能有一些取值。7.trnd()此函數(shù)生成服從t(Student'stDistribution,這里Student不是學生的意思,而是Cosset.W.S.的筆名)分布的隨機數(shù)。t分布有1個參數(shù):自由度v?;菊Z法trnd(v,[M,N,P,...])生成的隨機數(shù)服從參數(shù)為v的t分布,這些隨機數(shù)排列成M*N*P...多維向量。如果只寫M,則生成M*M矩陣;如果參數(shù)為[M,N]可以省略掉方括號。一些例子:trnd(7,5,l)%生成5個隨機數(shù)排列的列向量,一般用這種格式trnd(7,5)%生成5行5列的隨機數(shù)矩陣trnd(7,[5,4])%生成一個5行4列的隨機數(shù)矩陣%注:上述語句生成的隨機數(shù)所服從的參數(shù)為(v=7)的t分布生成的隨機數(shù)大致的分布。x=trnd(7,100000,l);hist(x,50);可以發(fā)現(xiàn)t分布比標準正太分布要“瘦”,不過隨著自由度v的增大,t分布會逐漸變胖,當自由度為正無窮時,它就變成標準正態(tài)分布了。接下來的分布相對沒有這么常用,同時這些函數(shù)的語法和前面函數(shù)語法相同,所以寫得就簡略一些——在視頻中也不會講述,你只需按照前面那幾個分布的語法套用即可,應該不會有任何困難——時間足夠的話這是一個不錯的練習機會。8.betarnd()此函數(shù)生成服從Beta分布的隨機數(shù)。Beta分布有兩個參數(shù)分別是A和B。下圖是A=2,B=5的beta分布的PDF圖形。
25beta1L111A2-A1J5-1T1\OS10J50OJ511J52ZJ5生成beta分布隨機數(shù)的語法是:betarnd(A,B,[M,N,P,...])9.exprnd()此函數(shù)生成服從指數(shù)分布的隨機數(shù)。指數(shù)分布只有一個參數(shù):mu,下圖是mu=3時指數(shù)分布的PDF圖形生成指數(shù)分布隨機數(shù)的語法是:betarnd(mu,[M,N,P,...])gamrnd()
生成服從Gamma分布的隨機數(shù)。Gamma分布有兩個參數(shù):A和B。下圖是A=2,B=5Gamma分布的PDF圖形生成Gamma分布隨機數(shù)的語法是:gamrnd(A,B,[M,N,P,...])lognrnd()生成服從對數(shù)正態(tài)分布的隨機數(shù)。其有兩個參數(shù):mu和sigma,服從這個這樣的隨機數(shù)取對數(shù)后就服從均值為mu,標準差為sigma的正態(tài)分布。下圖是mu=-l,sigma=l/1.2的對數(shù)正態(tài)分布的PDF圖形。
生成對數(shù)正態(tài)分布隨機數(shù)的語法是:lognrnd(mu,sigma,[M,N,P,...])raylrnd()生成服從瑞利(Rayleigh)分布的隨機數(shù)。其分布有1個參數(shù):B。下圖是B=2的瑞利分布的PDF圖形。生成瑞利分布隨機數(shù)的語法是:raylrnd(B,[M,N,P,...])wblrnd()生成服從威布爾(Weibul1)分布的隨機數(shù)。其分布有2個參數(shù):scale參數(shù)A和shape參數(shù)B。下圖是A=3,B=2的Weibull分布的PDF圖形。生成Weibull分布隨機數(shù)的語法是:wblrnd(A,B,[M,N,P,...])還有非中心卡方分布(ncx2rnd),非中心F分布(ncfrnd),非中心t分布(nctrnd),括號中是生成服從這些分布的函數(shù),具體用法用:help函數(shù)名查找。離散型分布隨機數(shù)離散分布的隨機數(shù)可能的取值是離散的,一般是整數(shù)。unidrnd()此函數(shù)生成服從離散均勻分布的隨機數(shù)。Unifrnd是在某個區(qū)間內均勻選取實數(shù)(可為小數(shù)或整數(shù)),Unidrnd是均勻選取整數(shù)隨機數(shù)。離散均勻分布隨機數(shù)有1個參數(shù):n,表示從{1,2,3,...N}這n個整數(shù)中以相同的概率抽樣?;菊Z法:unidrnd(n,[M,N,P,...])這些隨機數(shù)排列成M*N*P...多維向量。如果只寫M,則生成M*M矩陣;如果參數(shù)為[M,N]可以省略掉方括號。一些例子:unidrnd(5,5,l)%生成5個隨機數(shù)排列的列向量,一般用這種格式unidrnd(5,5)%生成5行5列的隨機數(shù)矩陣unidrnd(5,[5,4])%生成一個5行4列的隨機數(shù)矩陣%注:上述語句生成的隨機數(shù)所服從的參數(shù)為(10,0.3)的二項分布生成的隨機數(shù)大致的分布。x=unidrnd(9,100000,l);hist(x,9);可見,每個整數(shù)的取值可能性基本相同。binornd()此函數(shù)生成服從二項分布的隨機數(shù)。二項分布有2個參數(shù):n,p??紤]一個打靶的例子,每槍命中率為p,共射擊N槍,那么一共擊中的次數(shù)就服從參數(shù)為(N,p)的二項分布。注意p要小于等于1且非負,N要為整數(shù)?;菊Z法:binornd(n,p,[M,N,P,...])生成的隨機數(shù)服從參數(shù)為(N,p)的二項分布,這些隨機數(shù)排列成M*N*P...多維向量。如果只寫M,則生成M*M矩陣;如果參數(shù)為[M,N]可以省略掉方括號。一些例子:binornd(10,0.3,5,l)%生成5個隨機數(shù)排列的列向量,一般用這種格式binornd(10,0.3,5)%生成5行5列的隨機數(shù)矩陣binornd(10,0.3,[5,4])%生成一個5行4列的隨機數(shù)矩陣%注:上述語句生成的隨機數(shù)所服從的參數(shù)為(10,0.3)的二項分布生成的隨機數(shù)大致的分布。x=binornd(10,0.45,100000,l);hist(x,ll);我們可以將此直方圖解釋為,假設每槍射擊命中率為0.45,每論射擊10次,共進行10萬輪,這個圖就表示這10萬輪每輪命中成績可能的一種情況。16.geornd()此函數(shù)生成服從幾何分布的隨機數(shù)。幾何分布的參數(shù)只有一個:p。幾何分布的現(xiàn)實意義可以解釋為,打靶命中率為p,不斷地打靶,直到第一次命中目標時沒有擊中次數(shù)之和。注意p是概率,所以要小于等于1且非負?;菊Z法:geornd(p,[M,N,P,...])這些隨機數(shù)排列成M*N*P...多維向量。如果只寫M,則生成M*M矩陣;如果參數(shù)為[M,N]可以省略掉方括號。一些例子:geornd(0.4,5,l)%生成5個隨機數(shù)排列的列向量,一般用這種格式geornd(0.4,5)%生成5行5列的隨機數(shù)矩陣geornd(0.4,[5,4])%生成一個5行4列的隨機數(shù)矩陣%注:上述語句生成的隨機數(shù)所服從的參數(shù)為(0.4)的二項分布生成的隨機數(shù)大致的分布。x=geornd(0.4,100000,l);hist(x,50);17.poissrnd()此函數(shù)生成服從泊松(Poisson)分布的隨機數(shù)。泊松分布的參數(shù)只有一個:lambda。此參數(shù)要大于零?;菊Z法:geornd(p,[M,N,P,...])這些隨機數(shù)排列成M*N*P...多維向量。如果只寫M,則生成M*M矩陣;如果參數(shù)為[M,N]可以省略掉方括號。一些例子:poissrnd(2,5,l)%生成5個隨機數(shù)排列的列向量,一般用這種格式poissrnd(2,5)%生成5行5列的隨機數(shù)矩陣poissrnd(2,[5,4])%生成一個5行4列的隨機數(shù)矩陣%注:上述語句生成的隨機數(shù)所服從的參數(shù)為(2)的泊松分布生成的隨機數(shù)大致的分布。x=poissrnd(2,100000,l);hist(x,50);其他離散分布還有超幾何分布(Hyper-geometric,函數(shù)是hygernd)等,詳細見Matlab幫助文檔。(六)特殊連續(xù)分布這里我將Matlab中沒有對應函數(shù)的分布稱為特殊分布。有多種方法可以用于生產(chǎn)服從這些分布的隨機數(shù)。這里主要介紹兩種最常見的。1逆CDF函數(shù)法如果我們已知某特定一維分布的CDF函數(shù),經(jīng)過如下幾個步驟即可生成符合該分布的隨機數(shù)。(其中數(shù)學推導等在此處略去,詳見相關數(shù)學書籍)計算CDF函數(shù)的反函數(shù):生成服從(0,1)區(qū)間上均勻分布的初始隨機數(shù)a令x=,則x即服從我們需要的特定分布的隨機數(shù)。為了更形象解說這種方法,這里選取柯西(Cauchy)分布作為例子。有時也稱其為洛侖茲分布或者Breit-Wigner分布??挛鞣植加幸淮筇攸c就是,它是肥尾(Fat-tai1,又譯作胖尾)分布。在金融市場中,肥尾分布越來越受到重視,因為在傳統(tǒng)的正態(tài)分布基本不考慮像當前次貸危機等極端情況,而肥尾分布則能很好地將很極端的情形考慮進去。上圖是Cauchy分布和標準正態(tài)分布PDF圖對比,看看是不是Cauchy分布的尾巴(x軸兩端)更“胖”一點?柯西分布的PDF函數(shù)是:簡化起見我們只考慮xf=0,Y=1情形。此時PDF函數(shù)是:1PDF函數(shù)對x作積分,就得到CDF函數(shù)(推導過程略):現(xiàn)在我們套用這三個步驟來生成服從Cauchy分布的隨機數(shù):1.計算得到Cauchy分布CDF函數(shù)的反函數(shù)為:2?使用rand()函數(shù)生成(0,1)區(qū)間上均勻分布的初始隨機數(shù)。我習慣一次生成一堆這種隨機數(shù)。original_x=rand(l,100000);3.將初始隨機數(shù)代入CDF反函數(shù)即可得到我們需要的Cauchy隨機數(shù)。。cauchy_x二tan((original_xT/2)*pi);上面這兩句代碼結合起來就生成了10萬個服從參數(shù)為(xfO,Y=1)Cauchy分布的隨機數(shù)。這種方法生成隨機數(shù)與Cauchy分布有多大相似之處呢?這里有一個圖可以說明:藍色的圖形就是用hist畫出的隨機數(shù)的樣本分布情況,紅色線條是Cauchy分布理論的PDF圖形。由此可看出生成的隨機數(shù)挺符合Cauchy分布。注意:上圖中,我略去了x軸小于-12.5和大于12.5部分的圖形因為Cauchy是胖尾分布,會生成出的不少取值很大的隨機數(shù),而那些很大的值使得我們不方便用hist函數(shù)來畫隨機數(shù)分布圖。注意,這種方法本身雖然很簡單,效率也很高,但有如下受限之處:它有個可能會出錯的地方,有的CDF函數(shù)的反函數(shù)在0或者1處的值是正/負無窮,例如此處的Cauchy分布就是這樣,倘若用(0,1)均勻分布產(chǎn)生的初始隨機數(shù)中包含0或者1,那么這個程序會出錯。幸運的是,迄今為止,我用Matlab的rand()函數(shù)生成的隨機數(shù)中還沒有出現(xiàn)過0或者1。但不同版本的Matlab的這種情況也許會改變。此處提醒你,如果程序出錯,不要忘記檢查是否是這個錯誤。CDF函數(shù)必須嚴格單調遞增,這也就意味著,PDF函數(shù)在x定義域內必須處處嚴格大于零,否則CDF的反函數(shù)不存在。即使CDF函數(shù)存在,如果它太復雜,可能導致計算速度太慢,甚至無法計算的后果。2?接受/拒絕法Acceptance-RejectionMethodAccelptence-Rejection方法的精髓在于“形似”,可以形象地將其比喻為制作冰雕一—二者相同之處在于都要首先堆砌出雛形,然后再用將多出的部分削去。用此法生成服從f(x)分布的隨機數(shù),分為如下幾大步驟:?首先,選用某個分布,如pdf為g(x)的分布,此時要計算一個常數(shù)C,使得對x定義域內任意的X都成立這相當于使cg(x)圖形完全“覆蓋”住f(x)圖形,容易理解,做冰雕時,最初堆出來的那堆冰塊要比最終得到的雕塑大。.生成服從pdf為g(x)分布的隨機數(shù),假設生成的隨機數(shù)為X。。再生成一個服從(0,1)間的均勻分布的隨機數(shù)y如果,丟棄生成的x0;反之,生成的x0就是我們需要的、服從f(x)分布的隨機數(shù)。下面用一個例子結合圖形解釋這種方法,假設我們要生成的分布加止;切是:,此pdf圖形如下圖的藍色曲線。我們選用(0,2)之間的均勻分布作為原始分布,即g(x)=0.5,此分布的pdf圖見下圖中的綠色線。由條件:無論哪個x,都要成立,我們計算得到c要大于等于10.8。這種情況下,我們一般選擇c=1.875。因為c選得越大,意味著我們堆砌的原始雛形越大,需要削去的部分越多,效率越低,所以我們要使得c盡量地小。生成服從(0,2)之間的均勻分布的隨機數(shù),設它為x0X0二unifrnd(0,2);然后再生成一個服從(0,1)間的均勻分布的隨機數(shù)yY=rand;L"—"…'八4—'—'—"——"—"—'—如果,丟棄生成的x0,重新生成;反之,生成的x0就是我們需要的、服從f(x)分布白以上步驟每次只能處理一個隨機數(shù),效率較低,下面這段代碼可以一次性生成一堆隨機數(shù)。N=400000;c=1.875;gx=0.5x0=unifrnd(0,2,1,N);y=rand(1,N);fx0=(x0-0.5).*(x0-0.5)/2.4;
final_x=xO(y〈二fxO./c/gx);在視頻教程中我會逐句解釋每句含義,如果沒聽懂,一般是因為你對Matlab向量運算不熟悉,請參照Matlab基礎教程學習此部分的內容,后面章節(jié)會有很多地方用得上。這段語句生成的變量final_x即為服從f(x)分布的隨機數(shù)組成的一個行向量。我們可以用hist查看這些隨機數(shù)大致的分布。hist(finalx,50);title('f(x)=(x-0.5)"2/2.4');如圖所示,生成的隨機數(shù)挺符合f(x)分布。這種方法很簡單,也不需要計算CDF函數(shù)的反函數(shù),但它也有如下受限之處:由于我們用隨機數(shù)y來控制是否削去某個隨機數(shù)xO,所以我們無法準確預知最終得到的隨機數(shù)數(shù)量多少。選擇合適的g(x)分布是此方法最關鍵的技巧所在。g(x)的選擇原則是在完全覆蓋f(x)的前提下盡可能與f(x)形似,二者形狀越相似,需要削去的部分就越少,這種方法的效率就越高。需要記住的是:很多時候,人們不選用這種方法的原因幾乎都在于它的效率過低。(七)特殊離散分布離散分布關鍵在獲得它的分布律,有了分布律我們計算骰子擲出點數(shù)小于等于某個數(shù)字的累積概率分布。一個簡單的例子,假設我們有一個不均勻的骰子,獲得六個點數(shù)的概率分別是:點數(shù)123456概率00000.2.2.2累積點數(shù)<<<<<<123456累積概率00000.6.8生成符合該分布隨機數(shù)的步驟是:
生成一個(0,1)間均勻分布的隨機數(shù)X0。依據(jù)x0介于累積概率哪個區(qū)間來決定擲出骰子的點數(shù)x。如0vx0v=0.1,則點數(shù)x為1,0.8vx0v=1,點數(shù)x為6。代碼是xO=rand;Fx0<0.1x=1;IIelseifx0<0.3x=2;elseifx0<0.4x=3elseifx0<0.6x=4elseifx0<0.8x=5elsex=6end這段語句能生成一個服從上表中離散分布的隨機數(shù)x,如果生成多個x,可以用循環(huán)語句,也可以考慮將上述代碼向量化。下圖是我用上述代碼生成10萬個隨機數(shù)所畫出的分布直方圖,可見這些隨機數(shù)很符合上表中的分布律。1J522J51J522J533L54+J5S5LS十七、生成多維聯(lián)合分布隨機數(shù)一維隨機變量是標量(也就是指單獨的一個數(shù)字),而多維隨機變量是一個向量。一個n維隨機變量x是有n個分量的向量,(X,X,...,X),用f(X,X,...,X)表示聯(lián)合分布,用01n01nf(X)表示第k維的邊緣分布,用f(X|X=x,X=x=x,X=x,...,X=x)表示當KKkk1122KTKTK+1K+1nn分量X=x,X=x,....X=x,X=x,...,X=x時第k個分量x的分布。這里大寫X表示1122k-1k-1k+1k+1nnk隨機變量某個維度上的分量,小寫x表示具體的數(shù)值。關于邊緣分布、條件分布、聯(lián)合分布一定要明白,這些都是基礎數(shù)學知識,非本課程內容。如果手頭沒有書,通過google搜索或上維基百科臨陣磨槍也是可以的。各種生成多維分布隨機數(shù)的方法
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年合作伙伴入住合同范本
- 2025年勞動合同和社保協(xié)議中工傷保險的細節(jié)
- 2025年辦公文具用品供貨合同范文
- 2025年基礎設施建設監(jiān)理框架協(xié)議
- 2025年養(yǎng)殖戶種牛交易申請協(xié)議范本
- 2025年采購合同簽訂與風險控制
- 2025年企業(yè)結構重組協(xié)議書模板
- 2025年住宿生校園安全責任協(xié)議
- 2025年企業(yè)兼職外貿(mào)業(yè)務員招聘協(xié)議
- 2025年專利申請輔導合作協(xié)議
- 故障處理記錄和總結分析表
- 墨點美術:芥子園畫譜
- 火龍罐技術課件
- 奧迪TT汽車說明書
- 撤銷因私出國(境)登記備案國家工作人員通知書
- (21)-9.1《藝術學概論》第九章第一節(jié) 藝術批評的含義與性質、原
- 北師大版五年級數(shù)學上冊《分數(shù)的再認識》評課稿
- 樓梯臺階抹灰施工技術交底
- 給教師的一百條建議-讀書分享會
- 小學數(shù)學教學評一致性研討活動
- EIM Book 1 Unit 7 Learning languages單元檢測試題
評論
0/150
提交評論