蒙特卡洛算法(PAI)
在新学期中的继续学习离散数学中,接触到蒙特卡洛算法,解决了我以前几何图形求面积不好求的问题,看到十分的开心。
蒙特卡洛算法就是模拟出指定某随机事件发生的概率,比如我们想要判断一下两枚骰子在同时掷出后,同时出现 6 的频率就可以通过增加实验执行的次数,来确保该频率越来越接近该事件发生的概率。也就是实验次数越多,所得到的结果才越精确。
最开始,我接触到的就是圆周率 Π 的计算,通过我们熟知的在一个单位圆加一个该圆的外切正方形这个图案,然后通过往这个平面洒出豆子,计算豆子的总个数和而掉落在圆内的豆子数量,间接地可以近似出该圆的面积: 正方形面积 = 圆内的豆子数 :总的豆子数,并且随着次数增加,面积越精确。
小提示:在正方形坐标的设定中,我们要控制随机数在(0,1)之间,并且更巧妙的是直接运用如下设计:
x = -1 + 2*rand()/double(RAND_MAX);
y = -1 + 2*rand()/double(RAND_MAX);
if(x * x + y * y <= R*R)//在单位圆内 num++;
其中 2 * rand()/double(RAND_MAX);
将范围扩到(0,2)之间,加上负一,就是(-1,1)的坐标点了。正方形的面积 2 * 2 = 4;
代码实现(最近在自学c++,以后尝试用c++).
#include<iostream>
using namespace std;
#include<ctime>
#include<cstdlib>
#define R 1
int main()
{int i,count,num = 0;//进行次数 double x,y;cout<<"输入模拟次数:"; cin>>count;srand((unsigned)time(NULL));cout<<"经过模拟计算可得:"<<endl;for(i = 0;i <= count - 1;i++){x = -1 + 2*rand()/double(RAND_MAX);y = -1 + 2*rand()/double(RAND_MAX);if(x * x + y * y <= R*R)//在单位圆内 num++; }double pi = (double)num/count*4;cout<<pi<<endl;return 0;
}
那么看了以上这个简要的代码,相信有一定的了解了。那么在实现这个算法的时候,我们应该注意三点:
- 该问题是否是具有随机性,若具有随机性们就可直接模拟该过程;若不是随机过程问题,那么考虑是否可以转化为随机问题。
- 产生随机数。利用
srand((unsigned)time(NULL));
获取当前 时间并产生rand()
,随机数。当然这种方式产生的随机数是伪随机数,因为这些随机数都是基于同样的算法产生的随机数,在某些时候会产生不正确的影响。 - 确定一个随机变量,作为所要求的问题的解。意思就是得到我们所求问题的近似解。
蒙特卡洛算法(PAI)相关推荐
- python使用蒙特卡洛方法计算圆周率的流程图怎么画_在python中用蒙特卡洛算法计算圆周率...
本文写给那些python初学者与对蒙特卡洛算法感兴趣,但却不知该如何理解或应用的人. (虽然我发现这个貌似有许多人做过了,但是程序都相对复杂,不便于理解,于是我就自己编写了一段程序,海龟的可视化请看下 ...
- 马尔科夫链蒙特卡洛算法(python)
文章目录 1 蒙特卡洛算法 1.1 基本思想 1.2 蒙特卡洛积分 1.2.1 求π\piπ 1.2.2 求积分 1.2.2.1 一维积分 1.2.2.2 高维积分 1.3 蒙特卡洛期望估计 1.4 ...
- 蒙特卡洛算法及其实现
从今天开始要研究Sampling Methods,主要是MCMC算法.本文是开篇文章,先来了解蒙特卡洛算法. Contents 1. 蒙特卡洛介绍 2. 蒙特卡洛的应用 3. 蒙特卡 ...
- matlab碎纸拼接相似函数,基于蒙特卡洛算法构建能量函数的碎纸图片拼接方法
基于蒙特卡洛算法构建能量函数的碎纸图片拼接方法 [专利摘要]本发明提供了一种基于蒙特卡洛算法构建能量函数的碎纸图片拼接方法,主要涉及双面打印文件的拼接及复原问题,通常由于图片较多,信息量较大,故通常为 ...
- java中使用几率_Java中使用蒙特卡洛算法计算德州扑克成牌概率(二)- 计算牌面分值...
德州扑克中比较重要的一个算法就是计算牌面的得分,不仅仅关乎概率计算的结果,同时也需要很高的性能.蒙特卡洛算法计算的次数越多结果越准确,因此算法的性能至关重要.下面是一个高性能的牌面java计算算法. ...
- python实现蒙特卡洛算法_用Python实现基于蒙特卡洛算法小实验
用Python实现基于蒙特卡洛算法小实验 蒙特卡洛算法思想 蒙特卡洛(Monte Carlo)法是一类随机算法的统称,提出者是大名鼎鼎的数学家冯· 诺伊曼 ,他在20世纪40年代中期用驰名世界的赌城- ...
- Metropolis 采样与蒙特卡洛算法
Metropolis 算法又叫 Metropolis 抽样,是模拟退火算法的基础,在早期的科学计算中蒙特卡洛方法(Monte Carlo)是对大量原子在给定温度下的平衡态的随机模拟,当蒙特卡洛算法计算 ...
- 从伪随机数的产生到高大上的蒙特卡洛算法(C语言实现)
一 准备 1 生成任意区间任意大小的伪随机数 2 什么是蒙特卡洛算法 二蒙特卡洛算法的实现 1 pi的蒙特卡洛计算方式 2 特殊图形的蒙特卡洛计算方式 通过这篇短文想说明两个道理: 看似高大上.神秘兮 ...
- python实验原理_Python实现蒙特卡洛算法小实验过程详解
蒙特卡洛算法思想 蒙特卡洛(Monte Carlo)法是一类随机算法的统称,提出者是大名鼎鼎的数学家冯·诺伊曼,他在20世纪40年代中期用驰名世界的赌城-摩纳哥的蒙特卡洛来命名这种方法. 通俗的解释一 ...
最新文章
- vue项目设置img标签的默认图片
- mysql中文显示问号
- 百度2012校招笔试题之全排列与组合
- Python数据结构与算法(五)--链表
- 服务器网站访问日志分析,服务器日志分析与流量统计_直观快捷分析每个网站的日志...
- Docker学习总结(43)——Docker Compose 搭建Mysql主从复制集群
- 如何做好数据质量管理
- bzoj1293: [SCOI2009]生日礼物
- 自由与钱无关,限制你的只是自己的格局——北漂18年(77)
- 这可能是关于 TCP 和 UDP 最好的一篇文章!!
- 原来变压器可以用来调节阻抗匹配!
- 矩阵分析与应用-1.7-逆矩阵
- Conda——报错解决:CondaError: Cannot write to /.condarc Caused by PermissionError(13, ‘Permission denied‘)
- Python中的排除sort函数的参数key:a.sort(key=lambda x: x[1])是什么意思
- matlab绘制散点拟合图
- 【游戏设计笔记】游戏开发团队
- 流动模型、物质导数与速度散度的物理意义
- CS61A Lab 10
- 获取CARLA插件SCENARIO RUNNER
- ipad和android触控笔不通用,电容笔能取代apple pencil在iPad上使用吗?不看后悔!