Java 蒙特卡洛算法求圓周率近似值實例詳解
起源
[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年,美國拉斯阿莫斯國家實驗室的三位科學(xué)家John von Neumann,Stan Ulam 和 Nick Metropolis共同發(fā)明,被稱為蒙特卡洛方法。它的具體定義是:在廣場上畫一個邊長一米的正方形,在正方形內(nèi)部隨意用粉筆畫一個不規(guī)則的形狀,現(xiàn)在要計算這個不規(guī)則圖形的面積,怎么計算列?蒙特卡洛(Monte Carlo)方法告訴我們,均勻的向該正方形內(nèi)撒N(N 是一個很大的自然數(shù))個黃豆,隨后數(shù)數(shù)有多少個黃豆在這個不規(guī)則幾何形狀內(nèi)部,比如說有M個,那么,這個奇怪形狀的面積便近似于M/N,N越大,算出來的值便越精確。在這里我們要假定豆子都在一個平面上,相互之間沒有重疊。(撒黃豆只是一個比喻。)
特點
蒙特卡洛方法的偉大之處,在于對精確性問題無法解決的時候,利用“模擬”的思想來求解。 在各個領(lǐng)域得以應(yīng)用。本質(zhì)是模擬(simulation): 利用大量隨機輸入,產(chǎn)生各種輸出;結(jié)果的概率分布就是真實分布的“近似”。所以,輸入的分布是否隨機(目前計算機所能做的就是偽隨機,并不能產(chǎn)生真正的隨機分布),這個過程我們成為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("輸入點的數(shù)量:");
n = input.nextInt();
PI = MontePI(n);
System.out.println("PI="+PI);
}
}
輸出:
蒙特卡洛概率算法計算圓周率: 輸入點的數(shù)量: 9999999 PI=3.1417975141797516
總結(jié)
以上就是本文關(guān)于蒙特卡洛算法起源及特點的簡介,還有如何利用這種算法思路在Java編程中求圓周率的近似值實例,希望對大家有所幫助。喜歡的朋友請繼續(xù)關(guān)注腳本之家!
相關(guān)文章
Java中Map接口使用以及有關(guān)集合的面試知識點匯總
在java面試過程中,Map時常會被作為一個面試點來問,下面這篇文章主要給大家介紹了關(guān)于Java中Map接口使用以及有關(guān)集合的面試知識點匯總的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2022-07-07
EasyExcel實現(xiàn)導(dǎo)入+各種數(shù)據(jù)校驗功能
這篇文章主要介紹了EasyExcel實現(xiàn)導(dǎo)入+各種數(shù)據(jù)校驗,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-05-05
詳解Spring Security 中的四種權(quán)限控制方式
這篇文章主要介紹了詳解Spring Security 中的四種權(quán)限控制方式,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧2020-10-10
AsyncHttpClient IOExceptionFilter異常過濾器
這篇文章主要為大家介紹了AsyncHttpClient IOExceptionFilter異常過濾器代碼流程解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-12-12
java同一個類中,一個無事務(wù)方法調(diào)用一個有事務(wù)方法時,事務(wù)失效問題
本文詳細介紹了Spring框架中事務(wù)管理的實現(xiàn)原理,包括@Transactional注解的使用、事務(wù)的開啟、提交和回滾機制,以及代理對象的兩種實現(xiàn)方式(JDK動態(tài)代理和CGLIB代理),文章還探討了在同一個類中調(diào)用有事務(wù)方法時事務(wù)失效的原因,并提供了解決方法2024-12-12
Java中BM(Boyer-Moore)算法的圖解與實現(xiàn)
本文主要介紹了兩個大的部分,第一部分通過圖解的方式講解BM算法,第二部分則代碼實現(xiàn)一個簡易的BM算法,感興趣的小伙伴可以學(xué)習一下2022-05-05
java結(jié)合email實現(xiàn)自動推送功能
這篇文章主要介紹了java結(jié)合email實現(xiàn)自動推送功能,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-03-03

