蒙特卡罗方法概述

蒙特卡罗方法又称统计模拟法、随机抽样技术,是一种随机模拟方法,以概率和统计理论方法为基础的一种计算方法,是使用随机数(或更常见的伪随机数)来解决很多计算问题的方法。将所求解的问题同一定的概率模型相联系,用电子计算机实现统计模拟或抽样,以获得问题的近似解。为象征性地表明这一方法的概率统计特征,故借用赌城蒙特卡罗命名。

蒙特卡罗方法的基本思想

用事件发生的“频率”来决定事件的“概率”。高速电子计算机使得用数学方法在计算机上大量、快速地模拟这样的试验成为可能。

蒙特卡罗方法的基本原理

设有统计独立的随机变量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 10000000

using namespace std;

double Rand(double L, double R)
{
return L + (R - L) * rand() * 1.0 / RAND_MAX;
} double GetPi()
{
srand(time(NULL));
int cnt = ;
for(int i = ; i < MAX_ITERS; i++)
{
double x = Rand(-, );
double y = Rand(-, );
if(x * x + y * y <= )
cnt++;
}
return cnt * 4.0 / MAX_ITERS;
} int main()
{
for(int i = ; i < ; i++)
cout << fixed << setprecision()<<GetPi() << endl;
return ;
}

2.求e

#include <bits/stdc++.h>

#define MAX_ITERS 10000000

using 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 = ;
int n = MAX_ITERS;
srand(time(NULL));
for(int i = ; 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 = ; i < ; i++)
cout << fixed << setprecision() << getResult() << endl;
return ;
}
//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)的更多相关文章

  1. Monte Carlo Method(蒙特·卡罗方法)

    0-故事: 蒙特卡罗方法是计算模拟的基础,其名字来源于世界著名的赌城——摩纳哥的蒙特卡罗. 蒙特卡罗一词来源于意大利语,是为了纪念王子摩纳哥查理三世.蒙特卡罗(MonteCarlo)虽然是个赌城,但很 ...

  2. 蒙特·卡罗方法(Monte Carlo method)

    蒙特·卡罗方法(Monte Carlo method),也称统计模拟方法,是二十世纪四十年代中期由于科学技术的发展和电子计算机的发明,而被提出的一种以概率统计理论为指导的一类非常重要的数值计算方法.是 ...

  3. (转)Monte Carlo method 蒙特卡洛方法

    转载自:维基百科  蒙特卡洛方法 https://zh.wikipedia.org/wiki/%E8%92%99%E5%9C%B0%E5%8D%A1%E7%BE%85%E6%96%B9%E6%B3%9 ...

  4. 增强学习(四) ----- 蒙特卡罗方法(Monte Carlo Methods)

    1. 蒙特卡罗方法的基本思想 蒙特卡罗方法又叫统计模拟方法,它使用随机数(或伪随机数)来解决计算的问题,是一类重要的数值计算方法.该方法的名字来源于世界著名的赌城蒙特卡罗,而蒙特卡罗方法正是以概率为基 ...

  5. Summary: How to calculate PI? Based on Monte Carlo method

    refer to: http://www.stealthcopter.com/blog/2009/09/python-calculating-pi-using-random-numbers/ Duri ...

  6. 蒙特卡罗(Monte Carlo)方法简介

    蒙特卡罗(Monte Carlo)方法,也称为计算机随机模拟方法,是一种基于"随机数"的计算方法. 二 解决问题的基本思路 Monte Carlo方法的基本思想很早以前就被人们所发 ...

  7. 蒙特卡罗方法、蒙特卡洛树搜索(Monte Carlo Tree Search,MCTS)初探

    1. 蒙特卡罗方法(Monte Carlo method) 0x1:从布丰投针实验说起 - 只要实验次数够多,我就能直到上帝的意图 18世纪,布丰提出以下问题:设我们有一个以平行且等距木纹铺成的地板( ...

  8. Monte carlo

    转载 http://blog.sciencenet.cn/blog-324394-292355.html 蒙特卡罗(Monte Carlo)方法,也称为计算机随机模拟方法,是一种基于"随机数 ...

  9. 4_蒙特卡罗算法求圆周率PI

    题目 蒙特卡罗算法的典型应用之一为求圆周率PI问题. 思想: 一个半径r=1的圆,其面积为:S=PI∗r2=PI/4 一个边长r=1的正方形,其面积为:S=r2=1 那么建立一个坐标系,如果均匀的向正 ...

随机推荐

  1. MySQL集群(三)mysql-proxy搭建负载均衡与读写分离

    前言 前面学习了主从复制和主主复制,接下来给大家分享一下怎么去使用mysql-proxy这个插件去配置MySQL集群中的负载均衡以及读写分离. 注意:这里比较坑的就是mysql-proxy一直没有更新 ...

  2. String,StringBuffer,StringBuilder的区别及其源码分析

    String,StringBuffer,StringBuilder的区别这个问题几乎是面试必问的题,这里做了一些总结: 1.先来分析一下这三个类之间的关系 乍一看它们都是用于处理字符串的java类,而 ...

  3. L1正则化及其推导

    \(L1\)正则化及其推导 在机器学习的Loss函数中,通常会添加一些正则化(正则化与一些贝叶斯先验本质上是一致的,比如\(L2\)正则化与高斯先验是一致的.\(L1\)正则化与拉普拉斯先验是一致的等 ...

  4. Linux 文件查找

    在Linux系统的查找相关的命令: which 查看可执行文件的位置 whereis 查看文件的位置 locate 配合数据库查看文件位置 find 实际搜寻硬盘查询文件名称 whereis wher ...

  5. JS -- Variables As Properties

    Variables As Properties When you declare a global JavaScript variable, what you are actually doing i ...

  6. babel的使用详解

    由于es6的很多特性在旧的浏览器下支持不好,我们在使用的时候需要将其转化为es5,下面介绍babel解析器的使用 一:独立使用babel的方法 1.本地安装babel-cli npm install ...

  7. jdk版本查看,以及java -version 和JAVA_HOME不一致问题

    一.jdk版本查看及位数查看 在cmd进入命令行窗口,输入java -version 可以查看安装的jdk版本,如图: 当有64-bit时代表是64位jdk,如果没有则默认是32位的. 二.java ...

  8. PIC24 通过USB在线升级 -- USB HID bootloader

    了解bootloader的实现,请加QQ: 1273623966 (验证填bootloader):欢迎咨询或定制bootloader; 我的博客主页www.cnblogs.com/geekygeek ...

  9. Google Authenticator 如何集成(U盾的实现原理相同)

    Google Authenticator是一个类似U盾的二次验证工具,Google提供了它的开源客户端(https://github.com/google/google-authenticator)里 ...

  10. 在ubuntu16.04中一键创建LAMP环境

    步骤 1 执行命令apt-get update. 步骤 2 执行命令apt-get install lamp-server^. 步骤 3 在安装过程中会跳出Mysql数据库root用户密码设置窗口,按 ...