蒙特卡罗算法计算圆周率的主导思想是:统计学(概率)
原理:
先画一个正方形,画出其内切圆,然后这个正方形内随机的画点,设点落在圆内的概为P,则P=圆面积/正方形面积。
P=Pi*R*R/ 2R*2R=Pi/4 即 Pi=4P
—————————
实验步骤:
1. 在一个平面直角坐标系下(暂定第一象限),在点(R , R)(R>0)处画一个半径为R的圆。
2. 以这个圆画一个外接正方形,其边长为2R。
3. 随机取一点(X,Y)使得0<=X<=2R并且0<=Y<=2R,即随机点在正方形内。
4. 判断点是否在圆内,通过公式(R-X)(R-X)+(R-Y)(R-Y)<R*R计算。
5. 设所有点(也就是实验次数)的个数为N,落在圆内的点(满足步骤4的点)的个数为M,则
P=M/N 于是Pi=4*N/M
————————
简化步骤:
1.将圆心设在原点,以R为半径做圆,则第一象限的1/4圆面积为Pi*R*R/4
2.做该1/4圆的外接正方形, 坐标为(0,0)(0,R)(R,0)(R,R),则该正方形面积为R*R
3.随即取点(X,Y),使得0<=X<=R并且0<=Y<=R,即点在正方形内
4.通过公式 X*X+Y*Y<R*R判断点是否在1/4圆周内。
5.设所有点(也就是实验次数)的个数为N,落在1/4圆内的点(满足步骤4的点)的个数为M,则
P=M/N 于是Pi=4*N/M
————————
伪代码:
calculate(N) //设置迭代次数,即实验样本数,即点的总个数,即N
{
counter=N ;
M=0; //统计落在1/4圆周内的点的个数
radius=1; //设半径为1
while(counter-- >0)
{
x=rand(); //返回0到1间的随机数
y=rand();
if(x*x+y*y<=1) //检验点是否落在1/4圆内
M++;
}
return M/N;
}
___________________________________________________________________
根据概率论的原理,当实验次数越多(N越大),所计算出的Pi也越准确。
但计算机上的随机数毕竟是伪随机数,当取值超过一定值,也会出现不随机现象,因为伪随机数是周期函数。因此为了提高准确度,可以固定一个较大的N值(使之小于伪随机函数的周期即可),进行多次计算Pi值(每次采用不同的随机数种子),然后对其求平均数的方法即可。
分享到:
相关推荐
蒙特卡洛经典实现算例-pi的计算,我们利用求单位圆的1/4的面积来求得Pi/4从而得到Pi。如何在matlab中实现编程呢,
Monte Carlo and quasi-Monte Carlo sampling methods
蒙特卡洛方法(Monte Carlo method)也称统计模拟法、统计试验法。蒙特卡洛方法的基本思想是:首先建立一个描述问题的概率模型或随机过程,使它的参数或数字特征等于问题的解;然后通过对模型或过程的观察或抽样试验...
包含蒙特卡洛邻域的两大经典著作:Monte Carlo Statistical Methods和monte carlo strategies in scientific computing,希望对大家有帮助
关于金融数学的monte carlo方法比较权威的书
序列蒙特卡洛(Sequential Monte Carlo)的介绍(英文论文),对现有的序列蒙特卡洛方法进行了很详尽的研究。
关于cadence 如何使用monte carlo仿真的简单教程,希望对大家有用
An accessible treatment of Monte Carlo methods, techniques, and applications in the field of finance and economics. Providing readers with an in-depth and comprehensive guide, the Handbook in Monte ...
蒙特卡洛方法(Monte Carlo Simulation)是仿真的经典方法,掌握了,受益无穷。
1998年的老物;蒙特卡罗的入门书 起点低 落点高 从基本的伪随机数 逆变换 拒绝抽样 重要性抽样出发 最后已PMC和SMC结束 很适合自学以及反复阅读.
蒙特卡罗(Monte Carlo)方法,又称随机抽样或统计试验方法。当所要求解的问题是某种事件出现的概率,或者是某个随机变量的期望值时,它们可以通过某种“试验”的方法,得到这种事件出现的频率,或者这个随机变数的...
图像分析、随机场和马尔科夫链蒙特卡罗方法 第二版 英文版 image analysis, random fields and markov chain Monte carlo methods
Fast Monte Carlo algorithm
monte carlo算法的matlab实现,该算法也就是常说的粒子滤波器,欢迎大家学习交流
实验内容: 1、 了解matlab中各种常见随机数的...2、 掌握一维,高维的数值积分的monte carlo 方法; 实验要求: 1、 研究monte carlo 求积精度与样本容量的关系; 2、 比较monte carlo 方法与代数求积法的精度差异;
Wiley Monte Carlo Simulation and Finance
非常好的蒙特卡罗方法基础书籍,深入浅出地讲解了方法背后的逻辑,帮助快速入门,书里面贴了好多matlab程序,可以直接复制使用
主要内容: 1.各种随机数的生成方法. 2.MCMC方法.
蒙特卡罗(Monte Carlo)算法的基础概念,很好的入门教程
关于蒙特卡洛和拟蒙特卡洛采样方法的电子书,内容详细,印刷清晰。