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

作者:Sundy_Xu 时间:2023-10-19 23:32:10 

起源

 [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

来源:http://blog.csdn.net/xuxian361/article/details/8130948

标签:java,蒙特卡洛算法,圆周率
0
投稿

猜你喜欢

  • java环境变量path和classpath的配置

    2023-08-31 01:09:04
  • Java File类 mkdir 不能创建多层目录的解决

    2022-12-01 09:20:18
  • Java递归算法遍历部门代码示例

    2021-08-03 20:59:20
  • JavaWeb入门:HttpResponse和HttpRequest详解

    2022-09-05 16:44:31
  • Java多线程run方法中直接调用service业务类应注意的问题及解决

    2021-12-28 19:51:46
  • mybaties plus selectMaps和selectList的区别说明

    2021-07-15 11:18:29
  • C#统计字符串的方法

    2021-06-12 17:00:12
  • Android 媒体库数据更新方法总结

    2022-04-24 10:22:17
  • SpringBoot使用ApplicationEvent&Listener完成业务解耦

    2021-10-19 06:36:41
  • java程序设计语言的优势及特点

    2022-08-16 09:12:57
  • 使用递归实现数组求和示例分享

    2023-04-24 02:17:40
  • Android中AlertDialog的六种创建方式

    2021-08-23 15:59:52
  • Java实现查找算法的示例代码(二分查找、插值查找、斐波那契查找)

    2022-05-28 04:17:38
  • Java锁擦除与锁粗化概念和使用详解

    2022-02-09 15:32:30
  • java实现简单计算器功能

    2021-06-17 11:21:23
  • C#基础入门之值类型和引用类型的区别详析

    2022-02-22 00:14:04
  • 简单聊聊C#字符串构建利器StringBuilder

    2022-07-15 12:49:44
  • SpringBoot Profile多环境配置方式

    2023-12-14 01:44:24
  • Android使用SQLite数据库的示例

    2023-09-17 07:36:58
  • 理解maven命令package、install、deploy的联系与区别

    2022-08-09 05:11:39
  • asp之家 软件编程 m.aspxhome.com