zoukankan      html  css  js  c++  java
  • 蒙特卡罗算法

    参考

    MCMC(一)蒙特卡罗方法

    蒙特卡罗方法是一类以概率统计理论为指导的数值计算方法。蒙特卡罗是一种随机算法,使用随机数(或者伪随机数)来解决计算问题,其思想是:当所求解问题是某种随机事件出现的概率,或者是某个随机变量的期望值时,通过某种“实验”的方法,以这种事件出现的频率估计这一随机事件的概率,或者得到这个随机变量的某些数字特征,并将其作为问题的解。

    蒙特卡罗方法解题过程

    1. 构造或描述概率过程
    2. 实现从已知概率分布抽样
    3. 建立估计量

    蒙特卡罗方法计算圆周率

    %  %总的实验次数  
    %     n = input('请输入n:');  
    %     %落在圆中点的次数  
    %     m = 0;  
    %     %使用的圆的直径
    %     a = 2;  
    %     %循环实验  
    %     for i = 1:n  
    %         x = rand * a / 2;  %产生随机数
    %         y = rand * a / 2;  
    %         if (x^2 + y^2 <= (a/2)^2)  
    %             m = m + 1;  
    %         end  
    %     end  
    %     %显示结果  
    %     fprintf('当总实验次数n = %d时计算出来的圆周率:Pi = %d
    ',n, 4 * m / n); 

    利用蒙特卡罗积分求e

    #include <iostream>
    #include <iomanip>
    using namespace std;
    
    #define MAX_IETRS 1000000
    
    struct Point
    {
        double x;
        double y;
    };
    double Rand(double L, double R)
    {
        return L + (R - L)*rand()*1.0 / RAND_MAX;
    }
    Point GetPoint()
    {
        Point p;
        p.x = Rand(1.0, 2.0);
        p.y = Rand(0.0, 1.0);
        return p;
    }
    double GetResult()
    {
        int m = 0;
        int n = MAX_IETRS;
        srand(time(NULL));
        for (int i=0;i<n;++i)
        {
            Point p = GetPoint();
            if (p.x*p.y <= 1.0) m++;
        }
        return pow(2.0, 1.0*n / m);
    }
    //////////////////////////////
    int main()
    {
        for (int i=0;i<20;++i)
        {
            cout << fixed << setprecision(6) << GetResult() << endl;
        }
        return 0;
    }
    View Code

     蒙特卡罗采样算法

    参考: 蒙特卡罗方法采样算法

    给定概率分布,利用计算机产生符合该分布的样本。

  • 相关阅读:
    饿了么 PostgreSQL 优化之旅
    kubernetes 滚动更新发布及回滚
    kubernetes yaml
    mongodb安装
    node.js安装
    linux输出换行
    把token放入请求头
    $.ajaxSetup
    js前端读取文件内容
    v-echarts安装
  • 原文地址:https://www.cnblogs.com/larry-xia/p/9729980.html
Copyright © 2011-2022 走看看