7-8jmu-java-随机数-使⽤蒙特卡罗法计算圆周率的值(第⼀周)
⽅法介绍:
蒙特·卡罗⽅法(Monte Carlo method),也称统计模拟⽅法,是⼆⼗世纪四⼗年代中期由于科学技术的发展和电⼦计算机的发明,⽽被提出的⼀种以概率统计理论为指导的⼀类⾮常重要的数值计算⽅法。是指使⽤随机数(或更常见的伪随机数)来解决很多计算问题的⽅法。与它对应的是确定性算法。蒙特·卡罗⽅法在⾦融⼯程学,宏观经济学,计算物理学(如粒⼦输运计算、量⼦热⼒学计算、空⽓动⼒学计算)等领域应⽤⼴泛。(个⼈理解:即⼤量实验,模拟概率)
题⽬要求:
尝试使⽤蒙特卡罗法计算圆周率(π)的值。原理如下: 以原点(0, 0)作为圆⼼,半径为1画⼀个圆。该圆的外切正⽅形,边长为2。
现往该正⽅形内随机投点,数量⾜够多的情况下,落⼊圆内的点与落⼊整个 外切正⽅形的点的数量⽐值⼤概为:π *r *r /4 *r *r,然后就可以得到π的值。
注意:
请使⽤jdk库中的Random对象来⽣成随机数。 使⽤Math类中的sqrt与pow函数来计算开根号与平⽅值。让点(x,y)投在整个矩形中,x与y的取值范围为(-1≤x<1, -1≤y<1)。
输⼊格式:
随机数种⼦seed 投点个数n 注意:seed为long型,n为int型
输出格式:
计算出的值圆周率的值
输⼊样例:
2 100000
输出样例:
3.14684
import java.util.*;
public class Main {
public static void main(String[] args){nextint()方法
// TODO Auto-generated method stub
Scanner input =new Scanner(System.in);
long seed = Long();
int n = Int();
Random r =new Random(seed);
int count =0;
for(int i=0;i<n;i++){
double x = r.nextDouble()*2-1;
double y = r.nextDouble()*2-1;
if( x*x + y*y <=1) count++;
}
System.out.println(4*(double)count/n);
}
}
解题关键在于弄懂蒙特卡洛⽅法,然后new⼀个Random类,⽣成两个随机数,即可算出π值。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论