蒙特卡羅演算法(Monte Carlo method)

來源:互聯網
上載者:User

標籤:base   聯絡   acdream   val   這一   show   font   偽隨機   define   

蒙特卡羅方法概述

蒙特卡羅方法又稱統計類比法、隨機抽樣技術,是一種隨機類比方法,以機率和統計理論方法為基礎的一種計算方法,是使用隨機數(或更常見的偽隨機數)來解決很多計算問題的方法。將所求解的問題同一定的機率模型相聯絡,用電子電腦實現統計類比或抽樣,以獲得問題的近似解。為象徵性地表明這一方法的機率統計特徵,故借用賭城蒙特卡羅命名。

蒙特卡羅方法的基本思想

用事件發生的“頻率”來決定事件的“機率”。高速電子電腦使得用數學方法在電腦上大量、快速地類比這樣的實驗成為可能。

蒙特卡羅方法的基本原理

設有統計獨立的隨機變數Xi(i=1,2,3,…,k),其對應的機率密度函數分別為fx1,fx2,…,fxk,功能函數式為Z=g(x1,x2,…,xk)。

首先根據各隨機變數的相應分布,產生N組隨機數x1,x2,…,xk值,計算功能函數值 Zi=g(x1,x2,…,xk)(i=1,2,…,N),若其中有L組隨機數對應的功能函數值Zi≤0,則當N→∞時,根據伯努利大數定理及正態隨機變數的特性有:結構失效機率,可靠指標。

從蒙特卡羅方法的思路可看出,該方法迴避了結構可靠度分析中的數學困難,不管狀態函數是否非線性、隨機變數是否非正態,只要類比的次數足夠多,就可得到一個比較精確的失效機率和可靠度指標。

蒙特卡羅方法分子類比計算的步驟

蒙特卡羅方法實施步驟:

1、通過敏感性分析,確定隨機變數;

2、構造隨機變數的機率分布模型;

3、為各輸入隨機變數抽取隨機數;

4、將抽得的隨機數轉化為各輸入隨機變數的抽樣值;

5、將抽樣值組成一組項目評價基礎資料;

6、根據基礎資料計算出評價指標值;

7、整理類比結果所得評價指標的期望值、方差、標準差和它的機率分布及累計機率,繪製累計機率分布圖,計算項目可行或不可行的機率。

蒙特卡羅方法應用

1.求π

#include <bits/stdc++.h>#define MAX_ITERS 10000000using namespace std;double Rand(double L, double R){    return L + (R - L) * rand() * 1.0 / RAND_MAX;}double GetPi(){    srand(time(NULL));    int cnt = 0;    for(int i = 0; i < MAX_ITERS; i++)    {        double x = Rand(-1, 1);        double y = Rand(-1, 1);        if(x * x + y * y <= 1)            cnt++;    }    return cnt * 4.0 / MAX_ITERS;}int main(){    for(int i = 0; i < 10; i++)        cout <<  fixed << setprecision(10)<<GetPi() << endl;    return 0;
}

 

2.求e

#include <bits/stdc++.h>#define MAX_ITERS 10000000using namespace std;struct Point{    double x, y;};double Rand(double L, double R){    return L + (R - L) * rand() * 1.0 / RAND_MAX;}Point getPoint(){    Point t;    t.x = Rand(1.0, 2.0);    t.y = Rand(0.0, 1.0);    return t;}double getResult(){    int m = 0;    int n = MAX_ITERS;    srand(time(NULL));    for(int i = 0; i < n; i++)    {        Point t = getPoint();        double res = t.x * t.y;        if(res <= 1.0)            m++;    }    return pow(2.0, 1.0 * n / m);}int main(){    for(int i = 0; i < 20; i++)        cout << fixed << setprecision(10) << getResult() << endl;    return 0;}//precision() 返回當前的浮點數精度值//precision(val) 設定val為新的浮點數精度值, 並返回原值//setf(flags) 添加格式標誌flags, 返回所有標誌的原本狀態.//showpos    正數前面加上+號//fixed 使用小數計數法//scientific 使用科學計數法//uppercase 使用大寫字元//showbase  顯示數位進位//boolalpha    bool值使用字元表示 , true或者false//noboolalpha     bool使用0和1表示//left   靠左對齊//right  靠右對齊//internal 字元靠左對齊, 數字卡靠右對齊

 參考:

[1]http://blog.csdn.net/acdreamers/article/details/44978591

[2]MBA智庫:http://wiki.mbalib.com/wiki/%E8%92%99%E7%89%B9%E5%8D%A1%E7%BD%97%E6%96%B9%E6%B3%95

蒙特卡羅演算法(Monte Carlo method)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.