最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python實現(xiàn)蒙特卡洛算法小實驗過程詳解

 更新時間:2019年07月12日 09:38:45   作者:千鋒Python唐唐君  
這篇文章主要介紹了Python實現(xiàn)基于蒙特卡洛算法過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

蒙特卡洛算法思想

蒙特卡洛(Monte Carlo)法是一類隨機算法的統(tǒng)稱,提出者是大名鼎鼎的數(shù)學家馮·諾伊曼,他在20世紀40年代中期用馳名世界的賭城—摩納哥的蒙特卡洛來命名這種方法。

通俗的解釋一下蒙特卡洛算法的思想。假如籃子里有1000個蘋果,讓你每次閉著眼睛拿1個,挑出最大的。于是你閉著眼睛隨機拿了一個,然后再隨機拿一個與第一個比,留下大的,再隨機拿一個,與前次留下的比較,又可以留下大的……你每拿一次,留下的蘋果至少是當前最大的,循環(huán)往復這樣,拿的次數(shù)越多,挑出最大蘋果的可能性也就越大,但除非你把1000個蘋果都挑一遍,否則你無法肯定最終挑出來的就是最大的一個。也就是說,蒙特卡洛算法是樣本越多,越能找到最佳的解決辦法,但只是盡量找最好的,不保證一定是最好的。

與它形成對比的是拉斯維加斯算法思想。假如有一把鎖,有1000把鑰匙進行選擇,但只有1把是對的。于是你每次隨機拿1把鑰匙去試,打不開就再換1把。你試的次數(shù)越多,打開最優(yōu)解的機會就越大,但在打開之前,那些錯的鑰匙都是沒有用的。所以拉斯維加斯算法就是盡量找最好的解決辦法,但是不保證能找到。假設(shè)試了999次后沒有任何一把鑰匙能打開鎖,真正的鑰匙是第1000把,但是樣本并沒有第1000次選擇,那么拉斯維加斯算法就不能找到打開鎖的鑰匙。

蒙特卡洛和拉斯維加斯本身是兩座著名賭城,因為賭博中體現(xiàn)了許多隨機算法,所以借此命名。它們只是概括了隨機算法的特性,算法本身可能復雜,也可能簡單,在這兩類隨機算法之間的選擇,往往受到問題的局限。如果問題要求在有限采樣內(nèi),必須給出一個解,但不要求是最優(yōu)解,那就要用蒙特卡羅算法。反之,如果問題要求必須給出最優(yōu)解,但對采樣沒有限制,那就要用拉斯維加斯算法。

蒙特卡洛算法實驗

這么看來蒙特卡洛方法的理論支撐其實是概率論或統(tǒng)計學中的大數(shù)定律?;驹砗唵蚊枋鍪窍却罅磕M,然后計算一個事件發(fā)生的次數(shù),再通過這個發(fā)生次數(shù)除以總模擬次數(shù),得到想要的結(jié)果。下面我們以三個經(jīng)典的小實驗來學習下蒙特卡洛算法思想。

1.計算圓周率pi(π)值

實驗原理:在正方形內(nèi)部有一個相切的圓,圓面積/正方形面積之比是(PixRxR)/(2Rx2R)= Pi/4。在這個正方形內(nèi)隨機產(chǎn)生n個點,假設(shè)點落在圓內(nèi)的概率為P,那么P=圓面積/正方形面積,則P= Pi/4。如何計算點落在圓內(nèi)的概率P?可以計算點與中心點的距離,判斷是否落在圓的內(nèi)部,若這些點均勻分布,用M表示落到圓內(nèi)投點數(shù) , N表示總的投點數(shù),則圓周率Pi=4P=4xM/N。

實驗步驟:

(1)將圓心設(shè)在原點(0,0),以R為半徑形成圓,則圓面積為PixRxR

(2)將該圓外接正方形, 坐標為(-R,-R)(R,-R)(R, R)(-R,R),則該正方形面積為R*R

(3)隨即取點(X,Y),使得-R <=X<=R并且-R <=Y<=R,即點在正方形內(nèi)

(4)通過公式 XxX+YxY<= RxR判斷點是否在圓周內(nèi)(直角三角形邊長公式)。

(5)設(shè)所有點(也就是實驗次數(shù))的個數(shù)為N,落在圓內(nèi)的點(滿足步驟4的點)的個數(shù)為M,則P=M/N,于是Pi=4xM/N。

(6)運行結(jié)果為3.143052

def cal_pai_mc(n=1000000):
 r = 1.0
 a, b = (0.0, 0.0)
 x_neg, x_pos = a - r, a + r
 y_neg, y_pos = b - r, b + r
 m = 0
 for i in range(0, n+1):
 x = random.uniform(x_neg, x_pos)
 y = random.uniform(y_neg, y_pos)
 if x**2 + y**2 <= 1.0:
 m += 1
 return (m / float(n)) * 4

2.計算函數(shù)定積分值

實驗原理:若要求函數(shù)f(x)從a到b的定積分,我們可以用一個比較容易算得面積的矩型包圍在函數(shù)的積分區(qū)間上(假設(shè)其面積為Area),定積分值其實就是求曲線下方的面積。隨機地向這個矩形框里面投點,統(tǒng)計落在函數(shù)f(x)下方的點數(shù)量占所有點數(shù)量的比例為P,那么就可以據(jù)此估算出函數(shù)f(x)從a到b的定積分為Area×P。此處我們將a和b設(shè)為0和1,函數(shù)f(x)=x2。

運行結(jié)果為0.333749

def cal_integral_mc(n = 1000000):
 x_min, x_max = 0.0, 1.0
 y_min, y_max = 0.0, 1.0
 m = 0
 for i in range(0, n+1):
 x = random.uniform(x_min, x_max)
 y = random.uniform(y_min, y_max)
 # x*x > y 表示該點位于曲線的下面。
 if x*x > y:
 m += 1
 #所求的積分值即為曲線下方的面積與正方形面積的比
 return m / float(n)

3.計算函數(shù)極值,可避免陷入局部極值

實驗原理:極值是“極大值” 和 “極小值”的統(tǒng)稱。如果一個函數(shù)在某點的一個鄰域內(nèi)處處都有確定的值,函數(shù)在該點的值大于或等于在該點附近任何其他點的函數(shù)值,則稱函數(shù)在該點的值為函數(shù)的“極大值”。如果函數(shù)在該點的值小于或等于在該點附近任何其他點的函數(shù)值,則稱函數(shù)在該點 的值為函數(shù)的“極小值”。此處在區(qū)間[-2,2]上隨機生成一個數(shù),求出其對應的y,找出其中最大值認為是函數(shù)在[-2,2]上的極大值。

運行結(jié)果發(fā)現(xiàn)極大值185.1204262706596, 極大值點為1.5144491499169481

def cal_extremum_mc(n = 1000000):
 y_max = 0.0
 x_min, x_max = -2.0, 2.0
 y = lambda x:200*np.sin(x)*np.exp(-0.05*x)#匿名函數(shù)
 for i in range(0, n+1):
 x0 = random.uniform(x_min, x_max)
 if y(x0) > y_max:
 y_max = y(x0)
 x_max = x0
 return y_max, x_max

以上三個例子也稱為基于蒙特卡洛的投點法,由此得出的值并不是一個精確值,而是一個近似值。當投點的數(shù)量越來越大時,這個近似值也越接近真實值。

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 對Python3中的input函數(shù)詳解

    對Python3中的input函數(shù)詳解

    下面小編就為大家分享一篇對Python3中的input函數(shù)詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • Scrapy中詭異xpath的匹配內(nèi)容失效問題及解決

    Scrapy中詭異xpath的匹配內(nèi)容失效問題及解決

    這篇文章主要介紹了Scrapy中詭異xpath的匹配內(nèi)容失效問題及解決方案,具有很好的價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • Python網(wǎng)絡請求之Requests庫的高級功能運用

    Python網(wǎng)絡請求之Requests庫的高級功能運用

    在這篇文章中我們將進一步深入學習Requests庫的高級功能,包括處理重定向,設(shè)置超時,處理大文件以及錯誤和異常處理,需要的朋友可以參考下
    2023-08-08
  • python exit出錯原因整理

    python exit出錯原因整理

    這篇文章主要介紹了python exit出錯原因整理,有需要的朋友們可以跟著參考學習下。
    2020-08-08
  • Python爬蟲實現(xiàn)爬取百度百科詞條功能實例

    Python爬蟲實現(xiàn)爬取百度百科詞條功能實例

    這篇文章主要介紹了Python爬蟲實現(xiàn)爬取百度百科詞條功能,結(jié)合完整實例形式分析了Python爬蟲的基本原理及爬取百度百科詞條的步驟、網(wǎng)頁下載、解析、數(shù)據(jù)輸出等相關(guān)操作技巧,需要的朋友可以參考下
    2019-04-04
  • Python獲取圖像中像素點坐標實例代碼

    Python獲取圖像中像素點坐標實例代碼

    當我們處理圖像的時候避免不了要對訪問,或是讀取某一個像素點的值,下面這篇文章主要給大家介紹了關(guān)于利用Python如何獲取圖像中像素點坐標的相關(guān)資料,需要的朋友可以參考下
    2022-06-06
  • Python數(shù)據(jù)挖掘Pandas詳解

    Python數(shù)據(jù)挖掘Pandas詳解

    這篇文章主要介紹了Python數(shù)據(jù)挖掘Pandas,pandas是基于numpy模塊構(gòu)建的,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • Python3中的f-Strings增強版字符串格式化方法

    Python3中的f-Strings增強版字符串格式化方法

    這篇文章主要介紹了Python3中的f-Strings增強版字符串格式化方法,看完本文你將學習到如何以及為什么使用f-strings。對大家的工作或?qū)W習具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-03-03
  • 使用Python判斷IP地址合法性的方法實例

    使用Python判斷IP地址合法性的方法實例

    這篇文章主要介紹了使用Python判斷IP地址合法性的方法實例,需要的朋友可以參考下
    2014-03-03
  • Python語言中的重要函數(shù)對象用法小結(jié)

    Python語言中的重要函數(shù)對象用法小結(jié)

    Python作為一種強大的編程語言,提供了多種高級函數(shù)對象,如lambda匿名函數(shù)、map()、reduce()函數(shù),以及迭代器和生成器的使用,本文給大家介紹Python語言中的重要函數(shù)對象用法,感興趣的朋友跟隨小編一起看看吧
    2024-09-09

最新評論

河西区| 洛浦县| 文化| 手机| 宽甸| 广南县| 浑源县| 灵璧县| 柘荣县| 三江| 卓资县| 西安市| 苍梧县| 屯门区| 新巴尔虎左旗| 锦州市| 义乌市| 乳山市| 北流市| 化隆| 资源县| 慈利县| 温州市| 巫山县| 黔东| 响水县| 永善县| 丰台区| 长泰县| 萨迦县| 额济纳旗| 沙雅县| 蒲城县| 津南区| 环江| 彩票| 康马县| 鄂托克前旗| 宁河县| 罗城| 苗栗县|