VBA实现蒙特卡罗方法Excel示例-计算圆周率PI

分类:代码, 博客 标签:

早段时间曾对蒙特卡罗方法(Monte-Carlo)进行了介绍,这里水文工具集提供一个在Excel中的相关实例,这是个比较经典的例子,就是采用蒙特卡罗方法计算圆周率PI,计算原理就是采用圆的面积与相应外切正方形的面积比的4倍就是PI值,因此采用随机模拟,统计落入圆内的数据点的数目与总数相比,使用VBA实现的例子源代码如下:

Option Explicit
'================================
' 蒙特卡罗方法计算圆周率示例
' Monte_Carlo_PI
' http://www.cnhup.com
'================================
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值。



分类:代码, 博客 标签:

发表评论

You must be logged in to post a comment.