蒙特卡洛方法

一、简介

蒙特卡罗方法是一种计算方法。原理是通过大量随机样本,去了解一个系统,进而得到所要计算的值。

它非常强大和灵活,又相当简单易懂,很容易实现。对于许多问题来说,它往往是最简单的计算方法,有时甚至是唯一可行的方法。

它诞生于上个世纪40年代美国的"曼哈顿计划",名字来源于赌城蒙特卡罗,象征概率。

二、π的计算

第一个例子是,如何用蒙特卡罗方法计算圆周率π。

正方形内部有一个相切的圆,它们的面积之比是π/4。

现在,在这个正方形内部,随机产生10000个点(即10000个坐标对 (x, y)),计算它们与中心点的距离,从而判断是否落在圆的内部。

如果这些点均匀分布,那么圆内的点应该占到所有点的 π/4,因此将这个比值乘以4,就是π的值。

代码如下:

// Author: Waihui Zheng
// method: 使用蒙特卡罗方法

#include <stdlib.h>
#include <math.h>
#include <iostream>

const int POINTS = 10000000;

bool is_in_circle(double x0, double y0, double x, double y, double r) {
    double length = pow((x - x0), 2) + pow((y - y0), 2);
    return length <= pow(r, 2);
}

int main(int argc, char* argv[]) {
    srand(time(NULL));
    const double R = 1;
    int cnt = 0;
    for (int i = 0; i < POINTS; ++i) {
        double x = 1.0 * random() / RAND_MAX;
        double y = 1.0 * random() / RAND_MAX;
        if (is_in_circle(0, 0, x, y, R)) {
            ++cnt;
        }
    }

    std::cout << "π=" << 4.0 * cnt / POINTS << std::endl;
    return 0;
}
时间: 2024-10-10 08:49:10

蒙特卡洛方法的相关文章

用蒙特卡洛方法计算派-python和R语言

用蒙特卡洛方法算pi-基于python和R语言 最近follow了MOOC上一门python课,开始学Python.同时,买来了概率论与数理统计,准备自学一下统计.(因为被鄙视过不是统计专业却想搞数据分析) 有趣的是书里面有一块讲蒲丰投针计算Pi,这是一种随机模拟法,也就是蒙特卡洛法.蒲丰投针之于我太难,暂时没想到怎么用计算机模拟这一过程. python课中,老师也提到用随机模拟法,也就是蒙特卡洛法(MonteCarlo),用计算机模拟几千次实验,计算pi的近似值.好巧. 就拿python课中的

蒙特卡洛方法学习(二)

之前介绍了蒙特卡洛的优势.详情可参考之前的<蒙特卡洛方法学习(一)>. 那么对于我们设计的电路,对于电路中的元器件参数容差,进行统计分布,用一组伪随机数求得元器件的随机抽样序列,对这些随机抽样得到的元器件参数再对设计的电路进行功能仿真,比如:直流分析,交流分析,瞬态分析等等. 利用Multisim进行蒙特卡洛仿真电路.这里举一个简单的例子,如下:   对于上述电路中,电阻的阻值会有一个容差范围,电容的容值也会有一个容差范围,这些容差会对整个电路带来的影响,可以利用蒙特卡洛方法进行仿真,具体操作

蒙特卡洛方法计算圆周率的三种实现-MPI openmp pthread

蒙特卡洛方法实现计算圆周率的方法比较简单,其思想是假设我们向一个正方形的标靶上随机投掷飞镖,靶心在正中央,标靶的长和宽都是2 英尺.同时假设有一个圆与标靶内切.圆的半径是1英尺,面积是π平方英尺.如果击中点在标靶上是均匀分布的(我们总会击中正方形),那么飞镖击中圆的数量近似满足等式 飞镖落在圆内的次数/飞镖落在标靶内的总次数=π/4 因为环包含的面积与正方形面积的比值是π/4. 因为环所包含的面积与正方形面积的比值是π/4. 我们可以用这个公式和随机数产生器来估计π的值. 伪代码如下: numb

一文读懂蒙特卡洛方法:谷歌围棋机器人科普

蒙特卡罗方法入门 本文通过五个例子,介绍蒙特卡罗方法(Monte Carlo Method). 一.概述 蒙特卡罗方法是一种计算方法.原理是通过大量随机样本,去了解一个系统,进而得到所要计算的值. 它非常强大和灵活,又相当简单易懂,很容易实现.对于许多问题来说,它往往是最简单的计算方法,有时甚至是唯一可行的方法. 它诞生于上个世纪40年代美国的"曼哈顿计划",名字来源于赌城蒙特卡罗,象征概率. 二.π的计算 第一个例子是,如何用蒙特卡罗方法计算圆周率π. 正方形内部有一个相切的圆,它们

(转)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%95 蒙特卡洛方法[编辑] 维基百科,自由的百科全书 蒙特卡洛方法(英语:Monte Carlo method),也称统计模拟方法,是二十世纪四十年代中期由于科学技术的发展和电子计算机的发明,而被提出的一种以概率统计理论为指导的一类非常重要的数值计算方法.是指使用随机数(或更常见的伪随机数)来解决很多

二十世纪最有影响力的十大算法之一: 蒙特卡洛方法

第一部分:算法介绍 [1946: John von Neumann, Stan Ulam, and Nick Metropolis, all at the Los Alamos Scientific Laboratory, cook up the Metropolis algorithm, also known as the Monte Carlo method.]1946年,美国拉斯阿莫斯国家实验室的三位科学家John von Neumann,Stan Ulam 和 Nick Metropol

增强学习Reinforcement Learning经典算法梳理2:蒙特卡洛方法

1 前言 在上一篇文章中,我们介绍了基于Bellman方程而得到的Policy Iteration和Value Iteration两种基本的算法,但是这两种算法实际上很难直接应用,原因在于依然是偏于理想化的两个算法,需要知道状态转移概率,也需要遍历所有的状态.对于遍历状态这个事,我们当然可以不用做到完全遍历,而只需要尽可能的通过探索来遍及各种状态即可.而对于状态转移概率,也就是依赖于模型Model,这是比较困难的事情. 什么是状态转移?就比如一颗子弹,如果我知道它的运动速度,运动的当前位置,空气

蒙特卡洛方法求解圆周率

代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>蒙特卡洛方法求解圆周率</title> <style> body { -moz-user-select: none; /*火狐*/ -webkit-user-select: none; /*webkit浏览器*/ -ms-user-sel

量化投资_轻松实现MATLAB蒙特卡洛方法建模

1 目录 * MATLAB随机数的产生 - Uniform,Normal & Custom distributions * 蒙特卡洛仿真 * 产生股票价格路径 * 期权定价 - 经典公式 - 和蒙特卡洛方法比较 - 方差减小技巧 - Exotic Options * 多变量仿真 - Basket Option - Portfolio Value at Risk 2 重点内容讲解 2.1 蒙特卡洛仿真 - 依赖随机数生成 - rand,randn,randi 注:rand:产生平均分布随机数 ra

利用蒙特卡洛方法对面积进行近似估算

#对如下红色图形进行面积估算x = np.linspace(0, 2, 1000)#在0~2之间产生1000个样本点x y = x **3 #求出对应的y值 plt.plot(x, y) plt.fill_between(x, y, where=(y >0), color='red', alpha=0.5)#画出y>0的面积进行填充 plt.show() 该红色区域在一个2×8的矩形方框里面.使用蒙特卡洛方法,随机在这个矩形里面产生大量随机点(数量为N),计算有多少点(数量为count)落在红