蒙特卡洛演算法是常用的**演算法,現借助r語言實現一些蒙特卡洛演算法的應用。
一、蒙特卡洛方法測算π
1.1 原理:隨機向單位正方形和圓結構拋灑大量點,對於每個點,可能在圓內或者在圓外,當隨機拋灑點數量達到一定程度,圓內點將構成圓的面積,全部拋點將構成矩形面積。圓內點數除以所有點數就是面積之比,即π/4。隨機點數量越大,得到的π值越精確。
1.2 程式:
zeros
k darts
start
x1 y1
x2 y2
for (i in 1:darts)
else
}pi
proc.time()-start
print(paste0('pi is ',pi))
#par(new=true)
plot(x2,y2,pch = "*",col = "red") #圓外點
points(x1,y1,pch = "+",col = "green") #圓內點
curve(sqrt(1-x^2),0,1,add=t) #半圓邊界線
1.3 結果:
> proc.time()-start
使用者 系統 流逝
二、射擊問題
2.1 問題描述:在我方某前沿防守地域,敵人以乙個炮排(含兩門火炮)為單位對我方進行干擾和破壞。為躲避我方打擊,敵方對其陣地進行了偽裝並經常變換射擊地點。經過長期觀察發現,我方指揮所對敵方目標的指示有50%是準確的,而我方火力單位,在指示正確時,有1/3的射擊效果能毀傷敵人一門火炮,有1/6的射擊效果能全部毀傷敵人火炮。現在希望能用某種方式把我方將要對敵人實施的20次打擊結果顯現出來,確定有效射擊的比率及毀傷敵方火炮的平均值。
2.2 程式
k1 k2
k3 n
for(i in 1:n)
if(y1==4|y1==5)
if(y1==6)
}else
}out1
out2
out3
out4
out1
out2
out3
out4
2.3 結果:
[1] "第1次:指示正確!"
[1] "第1次:擊中1炮!"
[1] "第2次:指示錯誤,擊中0炮!"
[1] "第3次:指示正確!"
[1] "第3次:擊中0炮!"
[1] "第4次:指示正確!"
[1] "第4次:擊中1炮!"
[1] "第5次:指示錯誤,擊中0炮!"
[1] "第6次:指示錯誤,擊中0炮!"
[1] "第7次:指示錯誤,擊中0炮!"
[1] "第8次:指示正確!"
[1] "第8次:擊中1炮!"
[1] "第9次:指示錯誤,擊中0炮!"
[1] "第10次:指示正確!"
[1] "第10次:擊中0炮!"
[1] "第11次:指示錯誤,擊中0炮!"
[1] "第12次:指示錯誤,擊中0炮!"
[1] "第13次:指示正確!"
[1] "第13次:擊中1炮!"
[1] "第14次:指示正確!"
[1] "第14次:擊中1炮!"
[1] "第15次:指示錯誤,擊中0炮!"
[1] "第16次:指示錯誤,擊中0炮!"
[1] "第17次:指示正確!"
[1] "第17次:擊中1炮!"
[1] "第18次:指示正確!"
[1] "第18次:擊中2炮!"
[1] "第19次:指示正確!"
[1] "第19次:擊中0炮!"
[1] "第20次:指示正確!"
[1] "第20次:擊中0炮!"
> out1
[1] 0.35
> out2
[1] 0.4
> out3
[1] 0.3
> out4
[1] 0.05
蒙特卡洛演算法重在理解,與其說是演算法還不如說是思想。
蒙特卡洛演算法
從今天開始要研究sampling methods,主要是mcmc演算法 contents 1.蒙特卡洛介紹 2.蒙特卡洛的應用 3.蒙特卡洛積分 1.蒙特卡洛介紹 蒙特卡羅方法 monte carlo method 也稱統計模擬方法,是二十世紀四十年代中期由於科學技術的 發展和電子計算機的發明,而被...
蒙特卡洛演算法
問題描述 在數值積分法中,利用求單位圓的1 4的面積來求得pi 4從而得到pi。單位圓的1 4面積是乙個扇形,它是邊長為1單位正方形的一部分。只要能求出扇形面積s1在正方形面積s中佔的比例k s1 s就立即能得到s1,從而得到pi的值。怎樣求出扇形面積在正方形面積中佔的比例k呢?乙個辦法是在正方形中...
蒙特卡洛演算法(PAI
在新學期中的繼續學習離散數學中,接觸到蒙特卡洛演算法,解決了我以前幾何圖形求面積不好求的問題,看到十分的開心。蒙特卡洛演算法就是模擬出指定某隨機事件發生的概率,比如我們想要判斷一下兩枚骰子在同時擲出後,同時出現 6 的頻率就可以通過增加實驗執行的次數,來確保該頻率越來越接近該事件發生的概率。也就是實...