[爆卦]蒙地卡羅法pi是什麼?優點缺點精華區懶人包

為什麼這篇蒙地卡羅法pi鄉民發文收入到精華區:因為在蒙地卡羅法pi這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者markbaseball (Mark)看板Visual_Basic標題[VBA ] 蒙地卡羅模擬...


求版上的高手幫我健檢一下,我的程式碼錯在哪裡了?
正確的話應該要從A1~C100和 D1的表格都要有值,但是卻只在C1出現了100.6402的值
以下是我的程式碼

Sub Monte_Carlo_PI()
Dim i As Long
Dim j As Long
Dim k As Long
Dim x As Double
Dim y As Double
Dim dist As Double
Dim ma As Long
ma = 100
Randomize
For i = 1 To ma
For j = 1 To ma
For k = 1 To ma
x = Rnd()
y = Rnd()
dist = (x - 0.5) ^ 2 + (y - 0.5) ^ 2
If dist <= 0.25 Then
dist = dist * 4
Else: dist = 0
End If
Next k
Next j
Next i
Worksheets("工作表2").Cells(i, 1) = x
Worksheets("工作表2").Cells(j, 2) = y
Worksheets("工作表2").Cells(k, 3) = dist
Worksheets("工作表2").Cells(1, 4) = WorksheetFunction.Average([C1:C100])

End Sub

--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 163.22.18.73
※ 文章網址: https://www.ptt.cc/bbs/Visual_Basic/M.1427197248.A.450.html
wenyonba: 你的x,y,dist賦值,又沒有寫進Loop裡面... 03/24 20:11
markbaseball: 那該怎麼改寫呢 03/24 20:23
MOONRAKER: 沒有寫進去,當然就寫進去啊 03/24 22:28
Yaiba: 把Worksheets("工作表2").Cells(i, 1) = x 到dist三行 03/26 15:10
Yaiba: 搬到NEXT K 上面 03/26 15:10
Yaiba: 不過看起來程式錯很大... 03/26 15:13
lin0919: 這怎會是求圓周率的方式? 03/27 13:09
MOONRAKER: 沒錯阿,畫一個邊長2的方格,裡面中間畫一個半徑1的內 03/27 16:10
MOONRAKER: 切圓,然後對裡面一直丟銅板。如果你丟的銅板夠多,最 03/27 16:11
MOONRAKER: 後圓內銅板數/方格內銅板總數就會等於pi/4 03/27 16:13
MOONRAKER: 不過看來他的程式中間就歪了 所以看起來不像 03/27 16:14
Yaiba: 嗯 我也是寫了一個程式證實是對的 滿有趣的 03/27 19:27
lin0919: 他的寫法適 邊長一 裡面中間畫個半徑0.5的內切圓 03/27 23:39
lin0919: 然後丟硬幣 應該如果在圓內dist=1 部在圓內dist=0 03/27 23:39
lin0919: 然後再把dist加種起來平均*4 03/27 23:40
lin0919: 我重寫過就能求出3.14 03/27 23:40
MOONRAKER: 你這樣應該會得到4pi。 03/28 01:58
MOONRAKER: Sorry,算錯了。 03/28 01:59
wenyonba: 這個方法挺有趣的,我從前也不知道,不過剛剛寫了VB試了一 03/29 10:34
wenyonba: 下,Rnd()一千萬次,3.14156xxxx,似乎精度普普 XD 03/29 10:35
wenyonba: 不過一千萬確實對這種數值方法來說,也沒多大就是了~~ 03/29 10:35
wenyonba: 經由原Po學了點東西,很不賴~~ 03/29 10:36
Marty: Rand() 10萬次之後精度進展得很慢 03/30 10:20
Yaiba: 機率這種東西 本來就沒有準度 有準度就去賭場發財了... 03/30 16:20
Yaiba: 只能說可以得到一個大約的數字 要精準是不可能的... 03/30 16:21
MOONRAKER: 只是大數定理的一個展示而已,實用性不大。 03/31 10:10

你可能也想看看

搜尋相關網站