当前位置: 移动技术网 > IT编程>开发语言>Java > Java 蒙特卡洛算法求圆周率近似值实例详解

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

2019年07月19日  | 移动技术网IT编程  | 我要评论

荷花象征,好友123,恶龙军团优等生3

起源

 [1946: john von neumann, stan ulam, and nick metropolis, all at the los alamos scientific laboratory, cook up the metropolis algorithm, also known as the monte carlo method.]1946年,美国拉斯阿莫斯国家实验室的三位科学家john von neumann,stan ulam 和 nick metropolis共同发明,被称为蒙特卡洛方法。它的具体定义是:在广场上画一个边长一米的正方形,在正方形内部随意用粉笔画一个不规则的形状,现在要计算这个不规则图形的面积,怎么计算列?蒙特卡洛(monte carlo)方法告诉我们,均匀的向该正方形内撒n(n 是一个很大的自然数)个黄豆,随后数数有多少个黄豆在这个不规则几何形状内部,比如说有m个,那么,这个奇怪形状的面积便近似于m/n,n越大,算出来的值便越精确。在这里我们要假定豆子都在一个平面上,相互之间没有重叠。(撒黄豆只是一个比喻。)

特点

蒙特卡洛方法的伟大之处,在于对精确性问题无法解决的时候,利用“模拟”的思想来求解。 在各个领域得以应用。本质是模拟(simulation): 利用大量随机输入,产生各种输出;结果的概率分布就是真实分布的“近似”。所以,输入的分布是否随机(目前计算机所能做的就是伪随机,并不能产生真正的随机分布),这个过程我们成为sampling random variables。

计算圆周率近似值代码:

package com.xu.main; 
import java.util.scanner; 
public class p9_1 { 
 static double montepi(int n) { 
  double pi; 
  double x, y; 
  int i, sum; 
  sum = 0; 
  for (i = 1; i < n; i++) { 
   x = math.random(); 
   y = math.random(); 
   if ((x * x + y * y) <= 1) { 
    sum++; 
   } 
  } 
  pi = 4.0 * sum / n; 
  return pi; 
 } 
 public static void main(string[] args) { 
  int n; 
  double pi; 
  system.out.println("蒙特卡洛概率算法计算圆周率:"); 
  scanner input = new scanner(system.in); 
  system.out.println("输入点的数量:"); 
  n = input.nextint(); 
  pi = montepi(n); 
  system.out.println("pi="+pi); 
 } 
} 

输出:

蒙特卡洛概率算法计算圆周率:
输入点的数量:
9999999
pi=3.1417975141797516

总结

以上就是本文关于蒙特卡洛算法起源及特点的简介,还有如何利用这种算法思路在java编程中求圆周率的近似值实例,希望对大家有所帮助。喜欢的朋友请继续关注移动技术网!

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网