亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

蒙特卡羅模擬 - python實現

系統 1540 0

基本原理

蒙特卡羅方法通過抓住事物運動的幾何數量和幾何特征,利用數字方法來加以模擬,即進行一種數字模擬實驗。它是以一個概率模型為基礎,按照這個模型所描繪的過程,通過模擬實驗的結果,作為問題的近似解。

主要步驟如下:
1.構造或描述概率過程
2.實現從已知概率分布抽樣
3.建立各種估計量

示例一:π值的計算

            
              
                import
              
               numpy 
              
                as
              
               np

              
                import
              
               pandas 
              
                as
              
               pd

              
                import
              
               matplotlib
              
                .
              
              pyplot 
              
                as
              
               plt

              
                %
              
               matplotlib inline


              
                # π的計算
              
              

n
              
                =
              
              
                30000
              
              

r
              
                =
              
              
                1.0
              
              
                #半徑
              
              
a
              
                ,
              
              b
              
                =
              
              
                (
              
              
                0.0
              
              
                ,
              
              
                0.0
              
              
                )
              
              
                #圓心
              
              
xmin
              
                ,
              
              xmax
              
                =
              
              a
              
                -
              
              r
              
                ,
              
              a
              
                +
              
              r
ymin
              
                ,
              
              ymax
              
                =
              
              b
              
                -
              
              r
              
                ,
              
              b
              
                +
              
              r

x
              
                =
              
              np
              
                .
              
              random
              
                .
              
              uniform
              
                (
              
              xmin
              
                ,
              
              xmax
              
                ,
              
              n
              
                )
              
              
y
              
                =
              
              np
              
                .
              
              random
              
                .
              
              uniform
              
                (
              
              ymin
              
                ,
              
              ymax
              
                ,
              
              n
              
                )
              
              

fig
              
                =
              
              plt
              
                .
              
              figure
              
                (
              
              figsize
              
                =
              
              
                (
              
              
                6
              
              
                ,
              
              
                6
              
              
                )
              
              
                )
              
              
axes
              
                =
              
              fig
              
                .
              
              add_subplot
              
                (
              
              
                1
              
              
                ,
              
              
                1
              
              
                ,
              
              
                1
              
              
                )
              
              
plt
              
                .
              
              plot
              
                (
              
              x
              
                ,
              
              y
              
                ,
              
              
                'ro'
              
              
                ,
              
              markersize
              
                =
              
              
                1
              
              
                )
              
              
plt
              
                .
              
              axis
              
                (
              
              
                'equal'
              
              
                )
              
              

d
              
                =
              
              np
              
                .
              
              sqrt
              
                (
              
              
                (
              
              x
              
                -
              
              a
              
                )
              
              
                **
              
              
                2
              
              
                +
              
              
                (
              
              y
              
                -
              
              b
              
                )
              
              
                **
              
              
                2
              
              
                )
              
              
res
              
                =
              
              
                sum
              
              
                (
              
              np
              
                .
              
              where
              
                (
              
              d
              
                <
              
              r
              
                ,
              
              
                1
              
              
                ,
              
              
                0
              
              
                )
              
              
                )
              
              
                print
              
              
                (
              
              
                '落在圓內的點有%i個'
              
              
                %
              
               res
              
                )
              
              

pi 
              
                =
              
              
                4
              
              
                *
              
              res
              
                /
              
              n

              
                print
              
              
                (
              
              
                "π的近似值為:"
              
              
                ,
              
              pi
              
                )
              
              
                #繪制圓形
              
              
                from
              
               matplotlib
              
                .
              
              patches 
              
                import
              
               Circle
circle
              
                =
              
              Circle
              
                (
              
              xy
              
                =
              
              
                (
              
              a
              
                ,
              
              b
              
                )
              
              
                ,
              
              radius
              
                =
              
              r
              
                ,
              
              alpha
              
                =
              
              
                0.5
              
              
                ,
              
              color
              
                =
              
              
                'r'
              
              
                )
              
              
axes
              
                .
              
              add_patch
              
                (
              
              circle
              
                )
              
              
plt
              
                .
              
              grid
              
                (
              
              
                True
              
              
                ,
              
              linestyle
              
                =
              
              
                '--'
              
              
                ,
              
              linewidth
              
                =
              
              
                '0.5'
              
              
                )
              
              
plt
              
                .
              
              show
              
                (
              
              
                )
              
            
          

示例二:計算積分y=x^2

            
              n
              
                =
              
              
                10000
              
              
                #投點次數
              
              
                #矩形區域邊界
              
              
x_min
              
                ,
              
              x_max
              
                =
              
              
                0.0
              
              
                ,
              
              
                1.0
              
              
y_min
              
                ,
              
              y_max
              
                =
              
              
                0.0
              
              
                ,
              
              
                1.0
              
              
                #在矩形區域內隨機投點
              
              
x
              
                =
              
              np
              
                .
              
              random
              
                .
              
              uniform
              
                (
              
              x_min
              
                ,
              
              x_max
              
                ,
              
              n
              
                )
              
              
y
              
                =
              
              np
              
                .
              
              random
              
                .
              
              uniform
              
                (
              
              y_min
              
                ,
              
              y_max
              
                ,
              
              n
              
                )
              
              
                #創建函數y=x**2
              
              
                def
              
              
                f
              
              
                (
              
              x
              
                )
              
              
                :
              
              
                return
              
               x
              
                **
              
              
                2
              
              
                #統計落在函數y=x^2圖像下方的點的數目
              
              
res
              
                =
              
              
                sum
              
              
                (
              
              np
              
                .
              
              where
              
                (
              
              y
              
                <
              
              f
              
                (
              
              x
              
                )
              
              
                ,
              
              
                1
              
              
                ,
              
              
                0
              
              
                )
              
              
                )
              
              
                #計算定積分的近似值
              
              
integral
              
                =
              
              res
              
                /
              
              n

              
                print
              
              
                (
              
              
                'integral:'
              
              
                ,
              
              integral
              
                )
              
              
                #繪制散點圖
              
              
fig
              
                =
              
              plt
              
                .
              
              figure
              
                (
              
              figsize
              
                =
              
              
                (
              
              
                6
              
              
                ,
              
              
                6
              
              
                )
              
              
                )
              
              
axes
              
                =
              
              fig
              
                .
              
              add_subplot
              
                (
              
              
                1
              
              
                ,
              
              
                1
              
              
                ,
              
              
                1
              
              
                )
              
              
axes
              
                .
              
              plot
              
                (
              
              x
              
                ,
              
              y
              
                ,
              
              
                'ro'
              
              
                ,
              
              markersize
              
                =
              
              
                1
              
              
                )
              
              
plt
              
                .
              
              axis
              
                (
              
              
                'equal'
              
              
                )
              
              
                #繪制y=x^2面積圖
              
              
xi
              
                =
              
              np
              
                .
              
              linspace
              
                (
              
              
                0
              
              
                ,
              
              
                1
              
              
                ,
              
              
                100
              
              
                )
              
              
yi
              
                =
              
              xi
              
                **
              
              
                2
              
              
plt
              
                .
              
              plot
              
                (
              
              xi
              
                ,
              
              yi
              
                ,
              
              
                '--k'
              
              
                )
              
              
plt
              
                .
              
              fill_between
              
                (
              
              xi
              
                ,
              
              yi
              
                ,
              
              
                0
              
              
                ,
              
              color
              
                =
              
              
                'r'
              
              
                ,
              
              alpha
              
                =
              
              
                0.5
              
              
                ,
              
              label
              
                =
              
              
                'area'
              
              
                )
              
              
plt
              
                .
              
              grid
              
                (
              
              
                )
              
            
          

蒙特卡羅模擬 - python實現_第1張圖片


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 久久国产欧美日韩精品 | 麻豆国产一区 | 麻豆首页 | 添bbb免费观看高清视频 | 色婷婷色99国产综合精品 | 农村寡妇一级毛片免费看视频 | 日本一级网站 | 999精品免费视频 | 欧美成人私人视频88在线观看 | 北条麻妃手机在线观看 | 久久99蜜桃精品久久久久小说 | 一级毛片免费不卡 | 久久98精品久久久久久婷婷 | 模特精品一区二区三区 | 国产91精品福利在线观看 | 黄色网址中文字幕 | 久久国产精品影院 | 天天干在线免费视频 | 牛牛影视在线 | 久草新在线观看 | 天天爽夜夜爽免费看 | 一线毛片 | 天天色天天射天天干 | 中文字幕精品1在线 | 99久久国产综合精品女不卡 | 亚洲综合免费视频 | 国产综合久久久久影院 | 在线亚洲精品国产成人二区 | 欧美激情在线精品一区二区 | 日韩中文字幕在线观看 | 亚洲欧美国产精品 | 国产激情视频在线观看首页 | 亚洲欧美久久一区二区 | 黄色影院免费观看 | 欧美一级毛片免费看高清 | 麻豆国产精品免费视频 | 欧美又黄又嫩大片a级 | 亚洲精品一区二区三区在线播放 | 四虎影视在线麻豆国产 | 在线视频一区二区日韩国产 | 久久久久影视 |