1、蒙特卡洛法:
蒙特卡罗方法又称统计模拟法、
随机抽样技术,是一种随机模拟方法,以概率和统计理论方法为基础的一种计算方法,是使用随机数(或更常见的伪随机数)来解决很多计算问题的方法。将所求解的问题同一定的
概率模型相联系,用电子计算机实现统计模拟或抽样,以获得问题的近似解。为象征性地表明这一方法的概率统计特征,故借用赌城蒙特卡罗命名。
提出:
蒙特卡罗方法于20世纪40年代美国在
第二次世界大战中研制
原子弹的“曼哈顿计划”计划的成员S.M.乌拉姆和J.冯·诺伊曼首先提出。数学家冯·诺伊曼用驰名世界的赌城—摩纳哥的Monte Carlo—来命名这种方法,为它蒙上了一层神秘色彩。在这之前,蒙特卡罗方法就已经存在。1777年,法国数学家布丰(Georges Louis Leclere de Buffon,1707—1788)提出用投针实验的方法求圆周率π。这被认为是蒙特卡罗方法的起源。
2、基本思想:
当所求解问题是某种随机事件出现的概率,或者是某个随机变量的期望值时,通过某种“实验”的方法,以这种事件出现的频率估计这一随机事件的概率,或者得到这个随机变量的某些数字特征,并将其作为问题的解。
工作过程
蒙特卡罗方法的解题过程可以归结为三个主要步骤:构造或描述概率过程;实现从已知概率分布抽样;建立各种估计量。
蒙特卡罗方法解题过程的三个主要步骤:
(1)构造或描述概率过程
对于本身就具有随机性质的问题,如粒子输运问题,主要是正确描述和模拟这个概率过 程,对于本来不是随机性质的确定性问题,比如计算定积分,就必须事先构造一个人为的概率过程,它的某些参量正好是所要求问题的解。即要将不具有随机性质的问题转化为随机性质的问题。
(2)实现从已知概率分布抽样
构造了概率模型以后,由于各种概率模型都可以看作是由各种各样的概率分布构成的,因此产生已知概率分布的随机变量(或随机向量),就成为实现蒙特卡罗方法模拟实验的基本手段,这也是蒙特卡罗方法被称为随机抽样的原因。最简单、最基本、最重要的一个
概率分布是(0,1)上的均匀分布(或称矩形分布)。
随机数就是具有这种均匀分布的随机变量。
随机数序列就是具有这种分布的总体的一个简单子样,也就是一个具有这种分布的相互独立的随机变数序列。产生
随机数的问题,就是从这个分布的抽样问题。在计算机上,可以用物理方法产生
随机数,但价格昂贵,不能重复,使用不便。另一种方法是用
数学递推公式产生。这样产生的序列,与真正的
随机数序列不同,所以称为伪随机数,或伪随机数序列。不过,经过多种
统计检验表明,它与真正的
随机数,或随机数序列具有相近的性质,因此可把它作为真正的随机数来使用。由已知分布随机抽样有各种方法,与从(0,1)上均匀分布抽样不同,这些方法都是借助于随机序列来实现的,也就是说,都是以产生随机数为前提的。由此可见,随机数是我们实现
蒙特卡罗模拟的基本工具。
(3)建立各种估计量
一般说来,构造了概率模型并能从中抽样后,即实现模拟实验后,我们就要确定一个随机变量,作为所要求的问题的解,我们称它为无偏估计。建立各种
估计量,相当于对
模拟实验的结果进行考察和登记,从中得到问题的解。
数学应用:
通常蒙特·卡罗方法通过构造符合一定规则的随机数来解决数学上的各种问题。对于那些由于计算过于复杂而难以得到
解析解或者根本没有解析解的问题,蒙特·卡罗方法是一种有效的求出
数值解的方法。一般蒙特·卡罗方法在数学中最常见的应用就是蒙特·卡罗积分。
3、Java运用模型计算圆周率:
原理:在数值积分法中,利用求单位圆的1/4的面积来求得Pi/4从而得到Pi。单位圆的1/4面积是一个扇形,它是边长为1单位正方形的一部分。只要能求出扇形面积S1在正方形面积S中占的比例K=S1/S就立即能得到S1,从而得到Pi的值。怎样求出扇形面积在正方形面积中占的比例K呢?一个办法是在正方形中随机投入很多点,使所投的点落在正方形中每一个位置的机会相等看其中有多少个点落在扇形内。将落在扇形内的点数m与所投点的总数n的比m/n作为k的近似值。P落在扇形内的充要条件是x^2+y^2<=1。
代码:
package com.citi.com.citi;
import java.util.Random;
import java.util.Scanner;
public class MontePI {
/**
* @param args
*/
public static void main(String[] args) {
System.out.println("Please input times: ");
Scanner sc=new Scanner(System.in);
caculatePI(sc.nextInt());
}
public static void caculatePI(int countInSquarel) {
int countInCircle = 0, i, resulttimes;
double x, y; /* 坐标 */
Random s = new Random();
for (resulttimes = 0; resulttimes < 10; resulttimes++) { /* 输出十次结果 */
for (i = 1; i <= countInSquarel; i++) {
x = s.nextDouble(); /* 在0~1之间产生一个随机x坐标 */
y = s.nextDouble(); /* 在0~1之间产生一个随机y坐标 */
if (caculateAcreage(x,y)<= 1.0)
countInCircle++; /* 统计落入单位圆中的点数 */
}
System.out.println("The result of pai is " + (double) countInCircle / countInSquarel* 4); /* 计算出π的值 */
countInCircle = 0;
}
}
private static double caculateAcreage(double xPosition,double yPosition){
return xPosition*xPosition+yPosition*yPosition;
}
}
相关推荐
使用蒙特卡洛方法计算圆周率的数值
蒙特卡洛方法计算圆周率 论文格式
用蒙特卡洛方法计算圆周率pi的matlab程序实现
蒙特卡洛方法计算圆周率等python 蒙特卡洛方法是一种基于随机抽样的数值计算方法,它可以用来估算各种数学问题的解,其中包括圆周率的计算。在本文中,我们将介绍如何使用Python编写蒙特卡洛方法来计算圆周率。 我们...
初学python,以概率的方法——蒙特卡洛方法求圆周率,以此练手
主要介绍了蒙特卡洛算法的起源,特点,以及Java编程中利用蒙特卡洛算法计算圆周率近似值的实例,需要的朋友可以参考下
圆周率(Pi)是圆的周长与直径的比值,一般用希腊字母 π 表示,是一个在数学及物理学中普遍存在的数学常数。π 也等于圆形之面积与半径平方之比,是精确计算圆周长、圆面积、球体积等几何形状的关键值。 蒙特卡洛...
通过随机取点,从原理上解释蒙特卡洛方法的过程,并且以求圆周率为例帮助更好理解蒙特卡洛方法。
利用蒙特卡洛方法计算圆周率,由python实现,可以对过程进行计时,有兴趣的小伙伴还可以通过修改来检测自己计算机性能。
利用蒙特卡洛方法进行积分计算和圆周率计算
使用python Multiprocessing模块进行并行、串行、超线程计算实验。计算实例为蒙特卡洛算法计算圆周率Pi。
利用Matlab近似计算圆周率的若干方法.pdf
用蒙特卡洛求圆周率,人为的构造一个合适的概率模型,依照对该模型进行大量的统计实验,使它的统计参量正好是待求问题的解。
蒙特卡洛方法实现三重积分与二重积分,北邮科学计算与编程作业
程序通过蒙特卡洛方法对一二重积分进行了计算。
很实用的东西,讲述了一系列蒙特卡洛方法的计算机用法,适用于工科各个学科
fortran编译蒙特卡洛方法pi的计算,采用投针问题的策略,使用蒙特卡洛方法进行pi的计算
对入门者详细介绍 Monte Carlo方法和计算机模拟技术,是您快速掌握该方法,并应用到实际项目中
蒙特卡洛积分方法,包括随机点法和均值法。C语言实现,包括封装成动态库的工程!
没有免积分选项,想要的可以直接联系我邮箱。530007971@qq.com