R语言模拟蒙特卡洛方法

举报
superdont 发表于 2018/12/28 19:14:28 2018/12/28
【摘要】 正好做个知识点,分享一下蒙特卡洛方法一个典型的应用:计算π值(或者圆面积等)。有一个正方形,和一个内切圆。我抓住一把沙子大概10000粒,随机的撒向正方形内。那么落在圆内部的沙子数量和落在正方形内的沙子数量的比值,应该和他们各自的面积是相等的(相似的),都是π/4.编程实现:1。确定中心圆点,将矩形和圆形的中心作为中心坐标点:将矩形大小确定为边长=200,对应圆半径=1001.1。随机生成沙...

正好做个知识点,分享一下蒙特卡洛方法一个典型的应用:计算π值(或者圆面积等)。

有一个正方形,和一个内切圆。

我抓住一把沙子大概10000粒,随机的撒向正方形内。

那么落在圆内部的沙子数量和落在正方形内的沙子数量的比值,应该和他们各自的面积是相等的(相似的),都是π/4.

v2-16e344b6f5e2a93e8f44411967d7c3e8_b.png

编程实现:

1。确定中心圆点,将矩形和圆形的中心作为中心坐标点:

v2-0fa07171d5ed1aa0ae1a6a555fad9237_b.png


将矩形大小确定为边长=200,对应圆半径=100

1.1。随机生成沙子的位置,使用随机数生成,用随机数确定沙子的x坐标位置、y坐标位置

1.2。通过计算沙子位置与原点的距离。判断沙子在圆内部还是圆外部。

2 。生成一个二维数组,4列。

第1列:存储每一粒沙子的x坐标、

第2列:存储每一粒沙子的y坐标

第3列:存储每一粒沙子距离原点的距离。

第4列:存储沙子在圆内部还是圆外部,该列根据第3列的距离值确定。

如果距离大于圆半径,则使用0表示沙子在圆形外部; 如果距离小于等于圆半径,则使用1表示数字在圆形的内部

3。计算二维数组第4列的和。得到在圆形内部的沙子数量。

4。根据关系:

圆内部沙子/沙子总数量=π/4

计算πde值:4*圆内部沙子数量/沙子总数量

5。VB的具体实现细节:

Private Sub Command1_Click()

Const r = 1000000

Dim a(r, 4) As Integer

Randomize

Form1.FontSize = 40

For i = 1 To r  

   For j = 1 To 2

       a(i, j) = Int(-100 + Rnd * (100 - (-100) + 1))      

   Next

Next


For i = 1 To r

   a(i, 3) = Sqr(a(i, 1) ^ 2 + a(i, 2) ^ 2)

Next


For i = 1 To r

   If a(i, 3) <= 100 Then a(i, 4) = 1

Next


'For i = 1 To 10

'    Print a(i, 1); a(i, 2); a(i, 3); a(i, 4)

'Next


Sum = 0

For i = 1 To r

   Sum = Sum + a(i, 4)

Next


Print "π的值是:"; 4 * Sum / r


End Sub



【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。