这是个比较经典的例子,就是采用蒙特卡罗方法计算圆周率PI,计算原理就是采用圆的面积与相应外切正方形的面积比的4倍就是PI值,
因此采用随机模拟,统计落入圆内的数据点的数目与总数相比,使用VBA实现的例子源代码如下:
01.Option Explicit
02.'================================
03.' 蒙特卡罗方法计算圆周率示例
04.' Monte_Carlo_PI
05.'
06.'================================
07.Sub Monte_Carlo_PI()
08. Dim i As Long
09. Dim x As Double
10. Dim y As Double
11. Dim dist As Double
12.
13. Dim cntInCircle As Long
14. Dim iterMAX As Long
15. iterMAX = 100000
16. cntInCircle = 0
17.
18. Randomize
19. For i = 1 To iterMAX
20. x = Rnd()
21. y = Rnd()
22. dist = Sqr((x - 0.5) ^ 2 + (y - 0.5) ^ 2)
23. If dist <= 0.5 Then
24. cntInCircle = cntInCircle + 1
25. End If
26. Next
27. Debug.Print 4 * cntInCircle / iterMAX, _
28. Application.WorksheetFunction.Pi(), _
29. Abs(Application.WorksheetFunction.Pi() _
30. - 4 * cntInCircle / iterMAX)
31.End Sub
注:增加iterMAX的值,可以更加逼近PI值



雷达卡




京公网安备 11010802022788号







