[VBA ] 蒙地卡羅模擬法求圓周率

看板Visual_Basic作者 (Mark)時間9年前 (2015/03/24 19:40), 編輯推噓8(8018)
留言26則, 6人參與, 最新討論串1/1
求版上的高手幫我健檢一下,我的程式碼錯在哪裡了? 正確的話應該要從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

03/24 20:11, , 1F
你的x,y,dist賦值,又沒有寫進Loop裡面...
03/24 20:11, 1F

03/24 20:23, , 2F
那該怎麼改寫呢
03/24 20:23, 2F

03/24 22:28, , 3F
沒有寫進去,當然就寫進去啊
03/24 22:28, 3F

03/26 15:10, , 4F
把Worksheets("工作表2").Cells(i, 1) = x 到dist三行
03/26 15:10, 4F

03/26 15:10, , 5F
搬到NEXT K 上面
03/26 15:10, 5F

03/26 15:13, , 6F
不過看起來程式錯很大...
03/26 15:13, 6F

03/27 13:09, , 7F
這怎會是求圓周率的方式?
03/27 13:09, 7F

03/27 16:10, , 8F
沒錯阿,畫一個邊長2的方格,裡面中間畫一個半徑1的內
03/27 16:10, 8F

03/27 16:11, , 9F
切圓,然後對裡面一直丟銅板。如果你丟的銅板夠多,最
03/27 16:11, 9F

03/27 16:13, , 10F
後圓內銅板數/方格內銅板總數就會等於pi/4
03/27 16:13, 10F

03/27 16:14, , 11F
不過看來他的程式中間就歪了 所以看起來不像
03/27 16:14, 11F

03/27 19:27, , 12F
嗯 我也是寫了一個程式證實是對的 滿有趣的
03/27 19:27, 12F

03/27 23:39, , 13F
他的寫法適 邊長一 裡面中間畫個半徑0.5的內切圓
03/27 23:39, 13F

03/27 23:39, , 14F
然後丟硬幣 應該如果在圓內dist=1 部在圓內dist=0
03/27 23:39, 14F

03/27 23:40, , 15F
然後再把dist加種起來平均*4
03/27 23:40, 15F

03/27 23:40, , 16F
我重寫過就能求出3.14
03/27 23:40, 16F

03/28 01:58, , 17F
你這樣應該會得到4pi。
03/28 01:58, 17F

03/28 01:59, , 18F
Sorry,算錯了。
03/28 01:59, 18F

03/29 10:34, , 19F
這個方法挺有趣的,我從前也不知道,不過剛剛寫了VB試了一
03/29 10:34, 19F

03/29 10:35, , 20F
下,Rnd()一千萬次,3.14156xxxx,似乎精度普普 XD
03/29 10:35, 20F

03/29 10:35, , 21F
不過一千萬確實對這種數值方法來說,也沒多大就是了~~
03/29 10:35, 21F

03/29 10:36, , 22F
經由原Po學了點東西,很不賴~~
03/29 10:36, 22F

03/30 10:20, , 23F
Rand() 10萬次之後精度進展得很慢
03/30 10:20, 23F

03/30 16:20, , 24F
機率這種東西 本來就沒有準度 有準度就去賭場發財了...
03/30 16:20, 24F

03/30 16:21, , 25F
只能說可以得到一個大約的數字 要精準是不可能的...
03/30 16:21, 25F

03/31 10:10, , 26F
只是大數定理的一個展示而已,實用性不大。
03/31 10:10, 26F
文章代碼(AID): #1L4Kr0HG (Visual_Basic)