楼主: peng3409
10503 13

[学科前沿] VBA实现蒙特卡罗方法Excel示例-计算圆周率PI [推广有奖]

  • 6关注
  • 36粉丝

版主

已卖:5810份资源

学科带头人

64%

还不是VIP/贵宾

-

TA的文库  其他...

私募

信托行业研究

威望
0
论坛币
2066 个
通用积分
4061.6661
学术水平
122 点
热心指数
146 点
信用等级
111 点
经验
55803 点
帖子
1836
精华
0
在线时间
2523 小时
注册时间
2009-2-16
最后登录
2025-3-9

楼主
peng3409 发表于 2010-6-3 20:11:40 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
这是个比较经典的例子,就是采用蒙特卡罗方法计算圆周率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值
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:蒙特卡罗方法 EXCEL 蒙特卡罗 xcel exce 蒙特卡罗 源代码 圆周率 经典的 正方形

沙发
gssdzc 在职认证  发表于 2010-6-3 20:20:26
非常感谢分享。

藤椅
peng3409 发表于 2010-6-8 10:04:56
在这个平台上,大家互相学习
独学而无友,则孤陋而寡闻

板凳
gn01325189 发表于 2010-10-3 04:00:16
good thing, thx

报纸
cc457921 发表于 2010-10-3 21:22:17
好资料~谢谢分享!!

地板
woogle81 发表于 2010-11-14 23:24:54
呵呵,谢谢楼主的分享!

7
fin9845cl 发表于 2010-11-17 22:43:19
好资料,谢谢楼主。。。

8
maybesomeday 发表于 2010-11-30 22:22:02
谢谢楼主的分享!

9
m8843620 发表于 2011-5-2 19:45:08
谢谢楼主的分享

10
tcca6675 发表于 2011-5-3 17:27:38
好东西,学习了!!!

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jr
拉您进交流群
GMT+8, 2025-12-26 20:42