作者markbaseball (Mark)
看板Visual_Basic
標題[VBA ] 蒙地卡羅模擬法求圓周率
時間Tue Mar 24 19:40:45 2015
求版上的高手幫我健檢一下,我的程式碼錯在哪裡了?
正確的話應該要從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://webptt.com/m.aspx?n=bbs/Visual_Basic/M.1427197248.A.450.html
1F:→ wenyonba: 你的x,y,dist賦值,又沒有寫進Loop裡面... 03/24 20:11
2F:→ markbaseball: 那該怎麼改寫呢 03/24 20:23
3F:→ MOONRAKER: 沒有寫進去,當然就寫進去啊 03/24 22:28
4F:推 Yaiba: 把Worksheets("工作表2").Cells(i, 1) = x 到dist三行 03/26 15:10
5F:→ Yaiba: 搬到NEXT K 上面 03/26 15:10
6F:推 Yaiba: 不過看起來程式錯很大... 03/26 15:13
7F:推 lin0919: 這怎會是求圓周率的方式? 03/27 13:09
8F:→ MOONRAKER: 沒錯阿,畫一個邊長2的方格,裡面中間畫一個半徑1的內 03/27 16:10
9F:→ MOONRAKER: 切圓,然後對裡面一直丟銅板。如果你丟的銅板夠多,最 03/27 16:11
10F:→ MOONRAKER: 後圓內銅板數/方格內銅板總數就會等於pi/4 03/27 16:13
11F:→ MOONRAKER: 不過看來他的程式中間就歪了 所以看起來不像 03/27 16:14
12F:推 Yaiba: 嗯 我也是寫了一個程式證實是對的 滿有趣的 03/27 19:27
13F:推 lin0919: 他的寫法適 邊長一 裡面中間畫個半徑0.5的內切圓 03/27 23:39
14F:→ lin0919: 然後丟硬幣 應該如果在圓內dist=1 部在圓內dist=0 03/27 23:39
15F:→ lin0919: 然後再把dist加種起來平均*4 03/27 23:40
16F:→ lin0919: 我重寫過就能求出3.14 03/27 23:40
17F:→ MOONRAKER: 你這樣應該會得到4pi。 03/28 01:58
18F:→ MOONRAKER: Sorry,算錯了。 03/28 01:59
19F:推 wenyonba: 這個方法挺有趣的,我從前也不知道,不過剛剛寫了VB試了一 03/29 10:34
20F:→ wenyonba: 下,Rnd()一千萬次,3.14156xxxx,似乎精度普普 XD 03/29 10:35
21F:→ wenyonba: 不過一千萬確實對這種數值方法來說,也沒多大就是了~~ 03/29 10:35
22F:→ wenyonba: 經由原Po學了點東西,很不賴~~ 03/29 10:36
23F:推 Marty: Rand() 10萬次之後精度進展得很慢 03/30 10:20
24F:推 Yaiba: 機率這種東西 本來就沒有準度 有準度就去賭場發財了... 03/30 16:20
25F:→ Yaiba: 只能說可以得到一個大約的數字 要精準是不可能的... 03/30 16:21
26F:→ MOONRAKER: 只是大數定理的一個展示而已,實用性不大。 03/31 10:10