R语言模拟蒙特卡洛方法
正好做个知识点,分享一下蒙特卡洛方法一个典型的应用:计算π值(或者圆面积等)。
有一个正方形,和一个内切圆。
我抓住一把沙子大概10000粒,随机的撒向正方形内。
那么落在圆内部的沙子数量和落在正方形内的沙子数量的比值,应该和他们各自的面积是相等的(相似的),都是π/4.
编程实现:
1。确定中心圆点,将矩形和圆形的中心作为中心坐标点:
将矩形大小确定为边长=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
- 点赞
- 收藏
- 关注作者
评论(0)