作者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/cn.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