计算PI(π)的几种方法
2018-03-13 21:15
3811 查看
计算π的方法
一、蒙特卡罗法
这种方法是一种利用计算机随机数的功能基于“随机数”的算法,通过计算落在单位圆内的点与落在正方形内的点的比值求PI。
由于图形的对称性,我们靠考虑该图的四分之一部分。
假定一点能够均匀地扔到一个正方形中,计算落入其中的点个数。通过计数其中落入内切圆的点的个数;
如果一共投入N个点,其中有M个落入圆中,则只要点均匀,假定圆周的半径为R,则:
MN=πR2(2R)2,即π=4∗MN(1)(1)MN=πR2(2R)2,即π=4∗MN
该方法得到的要得到π的精度与投入点的个数有关,一般个数较大时精度比较高。
java代码:随机计算π的程序
public class RandomPI { public static void main(String[] args) { // TODO Auto-generated method stub System.out.println(rand_pi(100000)); //改变参数值 } public static double rand_pi(int n) { int numInCircle = 0; double x, y; double pi; for(int i=0;i < n; i++){ x = Math.random(); y = Math.random(); if(x * x + y * y < 1) numInCircle++; } pi=(4.0 * numInCircle) / n; return pi; }
次数 | 1010 | 102102 | 103103 | 104104 | 105105 | 106106 | 107107 | 108108 | 109109 |
---|---|---|---|---|---|---|---|---|---|
估值 | 3.6 | 3.08 | 3.084 | 3.132 | 3.137 | 3.143 | 3.142097 | 3.14138508 | 3.141537232 |
二、数学公式(级数)
由数学公式:∑n=1∞(1n2)=π6(2)(2)∑n=1∞(1n2)=π6
java代码:随机计算π的程序
public class MathPi { public static void main(String[] args) { // TODO Auto-generated method stub System.out.println(math_Pi(1000));//改变参数值 } public static double math_Pi(int n) { int numInCircle = 0; double sum = 0; double pi; for(int i=1;i <= n; i++){ sum += 1.0/(i*i); } pi = Math.sqrt(sum * 6); return pi; } }
当n取1000时就很接近真实值了n=1000时,pi=3.1406380562059946。
三、划分网格计算π
将图片分为n*n个小方形,统计落在圆内的个数占所有方形的比列。
java代码:随机计算π的程序
public class gridPI { public static void main(String[] args) { // TODO Auto-generated method stub System.out.println(grid_Pi(10));//改变参数值 } public static double grid_Pi(int n) { int i; double sum=0; for(i = 0;i < n; i++) sum += (int)Math.sqrt(n*(double)n-i*(double)i); return (4.0 * sum)/n/n; } }
次数 | 1010 | 102102 | 103103 | 104104 | 105105 | 106106 | 107107 | 108108 | 109109 |
---|---|---|---|---|---|---|---|---|---|
估值 | 3.16 | 3.1416 | 3.141548 | 3.14159052 | 3.1415925456 | 3.141592649624 | 3.141592653506 | 3.141592653587 | 3.141592654037 |
相关文章推荐
- c/c++在windows下获取时间和计算时间差的几种方法总结 【转】
- Unity中计算某一个方法的耗时的几种方法
- 几种讨巧的整形长度计算方法
- PI的100种计算方法
- c++ 在windows下获取时间和计算时间差的几种方法总结
- 计算fibnacci 级数的几种方法
- php中计算时间差的几种方法
- c/c++在windows下获取时间和计算时间差的几种方法总结
- c/c++获取时间和计算时间差的几种方法总结
- c/c++在windows下获取时间和计算时间差的几种方法总结
- 采用蒙特卡洛方法计算PI的值
- 几种计算时间的方法
- c++ 在windows下获取时间和计算时间差的几种方法总结
- windows下获取时间和计算时间差的几种方法总结
- [推荐系统]mahout中实现的几种相似度计算方法
- 结构化大数据的几种计算方法
- C++ 计算 代码运行时间的 几种方法
- python学习——计算阶乘的几种方法
- php中计算时间差的几种方法
- [转]关键链方法的几种缓冲长度计算方法