`
taodongjie2012
  • 浏览: 5485 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Java运用蒙特卡洛方法计算圆周率

阅读更多

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程序实现

    蒙特卡洛方法计算圆周率.py

    初学python,以概率的方法——蒙特卡洛方法求圆周率,以此练手

    Java 蒙特卡洛算法求圆周率近似值实例详解

    第四步:在 main 方法中,使用 Scanner 对象读取用户输入的点数,然后调用 MontePI 方法计算圆周率的近似值,并将结果输出。 代码实现: ```java package com.xu.main; import java.util.Scanner; public class ...

    蒙特卡洛方法计算圆周率等python.docx

    蒙特卡洛方法是一种强大的数值计算技术,它利用随机抽样来解决复杂的问题。在Python中,我们可以利用蒙特卡洛方法来估算圆周率π的值。这种方法尤其适合处理那些解析解难以求得或者计算成本过高的问题。 首先,我们...

    蒙特卡洛仿真_蒙特卡洛方法求圆周率_

    蒙特卡洛方法是一种强大的数值计算技术,源于20世纪40年代的早期计算机科学研究,以其创始人之一的赌城——蒙特卡洛命名。这种方法基于概率统计理论,通过大量随机抽样来解决复杂的数学问题,尤其在物理、工程、金融...

    mc-蒙特卡洛方法计算圆周率(源码/.py)

    # 计算圆周率 # 核心思想:通过随机数(伪随机数)来解决计算问题的有效方法 # 圆周率计算:半径为1的四分之一圆,边长为1的正方形,随机抛小球,小球落在圆形区域与落在正方形区域的概率与面积成正比

    Monte_Carlo_1.zip_圆周率_圆周率计算_蒙特卡洛 积分_蒙特卡洛积分_计算圆周率

    利用蒙特卡洛方法计算圆周率的基本思想是:假设有一个边长为2的正方形,其中包含一个半径为1的单位圆。如果我们随机在这个正方形内生成大量点,那么这些点落在圆内的概率就是π/4。通过统计落入圆内的点的数量,并与...

    Python源码-用蒙特卡洛法计算圆周率π.py

    Python源码-用蒙特卡洛法计算圆周率π

    课程项目-基于MPI及蒙特卡洛方法的圆周率并行计算

    ### 课程项目-基于MPI及蒙特卡洛方法的圆周率并行计算 #### 一、项目背景 本项目旨在结合MPI(Message Passing Interface)并行计算框架与蒙特卡洛方法,实现对圆周率π的高效并行计算。MPI作为一种标准的并行编程...

    圆周率(蒙特卡洛).py

    利用蒙特卡洛方法计算圆周率,由python实现,可以对过程进行计时,有兴趣的小伙伴还可以通过修改来检测自己计算机性能。

    计算圆周率 源代码

    计算圆周率的方法有很多种,其中一些经典算法包括马赫林级数、巴比伦方法、勒让德公式以及蒙特卡洛方法等。源代码通常是实现这些算法的程序,可以帮助我们理解这些算法的运作原理。 马赫林级数是一种高效的近似计算...

    利用Matlab近似计算圆周率的若干方法.pdf

    在探讨使用Matlab程序近似计算圆周率的若干方法前,首先要了解圆周率π的基本概念。圆周率π是一个数学常数,表示圆的周长与其直径的比例。在历史上,不同的文化和数学家采取了多种方法来计算π的近似值,其中刘徽...

    并行串行超线程计算圆周率.py

    使用python Multiprocessing模块进行并行、串行、超线程计算实验。计算实例为蒙特卡洛算法计算圆周率Pi。

    趣味 SQL:使用蒙特卡洛方法计算圆周率 Pi 的值

    圆周率(Pi)是圆的周长与直径的比值,一般用希腊字母 π 表示,是一个在数学及物理学中普遍存在的数学常数。π 也等于圆形之面积与半径平方之比,是精确计算圆周长、圆面积、球体积等几何形状的关键值。 蒙特卡洛...

    蒙特卡洛方法及计算机模拟

    蒙特卡洛方法是一种基于随机抽样或统计试验的数值计算方法,由20世纪40年代的物理学家在解决原子弹设计中的复杂问题时首次提出。它的核心思想是通过大量的随机试验来近似求解数学、物理、工程等领域中的复杂问题。...

    蒙特卡洛方法模拟课件

    4. **案例分析**:通过具体的实例,如圆周率的近似计算、二维区域的积分等,展示蒙特卡洛方法的运用过程。 5. **误差分析**:讨论蒙特卡洛方法的收敛性、误差估计以及如何通过增加样本数量提高计算精度。 6. **...

    蒙特卡洛模拟计算pi值的c++实现,给不懂方法的人快速了解

    在本示例中,我们将探讨如何使用C++编程语言来实现蒙特卡洛模拟计算圆周率π的值。 **π值的计算** π是圆的周长与其直径之比,是数学中的一个基本常数,其精确值无法用有限的十进制或分数表示。然而,我们可以...

    蒙特卡洛法计算二重积分.rar_buffalorfm_carefully24s_二重积分r编程_蒙特卡洛_计算二重积分

    《蒙特卡洛方法在计算二重积分中的应用》 在数学领域,特别是在数值分析中,二重积分的计算是一项常见的任务。对于某些复杂的函数,传统的解析求解方法可能变得非常困难,这时我们可以借助计算机进行数值计算。其中...

Global site tag (gtag.js) - Google Analytics