VBA实现蒙特卡罗方法Excel示例-计算圆周率PI
早段时间曾对蒙特卡罗方法(Monte-Carlo)进行了介绍,这里水文工具集提供一个在Excel中的相关实例,这是个比较经典的例子,就是采用蒙特卡罗方法计算圆周率PI,计算原理就是采用圆的面积与相应外切正方形的面积比的4倍就是PI值,因此采用随机模拟,统计落入圆内的数据点的数目与总数相比,使用VBA实现的例子源代码如下:
Option Explicit
'================================
' 蒙特卡罗方法计算圆周率示例
' Monte_Carlo_PI
'
'================================
Sub Monte_Carlo_PI()
Dim i As Long
Dim x As Double
Dim y As Double
Dim dist As Double
Dim cntInCircle As Long
Dim iterMAX As Long
iterMAX = 100000
cntInCircle = 0
Randomize
For i = 1 To iterMAX
x = Rnd()
y = Rnd()
dist = Sqr((x - 0.5) ^ 2 + (y - 0.5) ^ 2)
If dist <= 0.5 Then
cntInCircle = cntInCircle + 1
End If
Next
Debug.Print 4 * cntInCircle / iterMAX, _
Application.WorksheetFunction.Pi(), _
Abs(Application.WorksheetFunction.Pi() _
- 4 * cntInCircle / iterMAX)
End Sub
注:增加iterMAX的值,可以更加逼近PI值。


