Excel实现一个基础的蒙特卡洛模拟

蒙特卡洛模拟貌似名字非常学术,其实其原理非常简单。蒙特卡洛是一个著名赌场的名字,将其命名为蒙特卡洛模拟是为了形象表示其方法含义。如果放在今天命名的话,也可以将其称为拉斯维加斯模拟或者澳门模拟。

简而言之,蒙塔卡洛模拟通过将问题转化为概率统计问题进行求解。比如求圆周率的数值,有很多很多方法。蒙特卡洛模拟的方法是,以下图为例子进行说明:

 向图中(x,y)范围为 [0,1]的黑色边框正方形区域(蓝色以及黄色区域)随机投点,统计落入1/4圆内(蓝色区域)的次数。在投了足够多的次数以后,计算落入圆内的次数/总次数,即为落入圆内的频率。这个频率值即接近1/4圆的面积除以正方形的面积,即Π/4

 下面你,我们在EXCEL模拟上述过程的实现。

一、创建1000个随机点(x,y)

在Excel创建两列,命名为randXrandY,在数据上输入 =RAND() 赋予[0,1]范围的随机值,接着将该单元格下拉,至第1000行处,赋予1000个单元格值,即创建了1000个randX值。

randY同上所述,最后结果如下所示:

二、判断是否落入1/4圆内 

按照点到原点的距离公式:

dis=randX^2+randY^2

求得dis,放入第三列。结果如下图所示:

在上面结果的基础上,如果dis<1,则落入圆内,如果dis>1,则落到圆外。 

利用如下语句进行判断: =IF(C2<1,1,0)  

通过上式,我们将落入圆内部分赋值为1,将落入圆外部分赋值为0。结果如下图所示:

三、 计算落入数量占总数的比重

对InorNot列进行求和,和即为落入圆内的点的数量。这个数量除以1000,其数值就近似等于Π/4

在新一列输入=SUM(D2:D1000)

求得res的数值,将其除以1000,即为落入圆内的频率值。

这里我们模拟出来的数值为0.790,我们连续模拟十次:

0.789,0.809,0.779,0.786,0.798,0.810,0.784,0.787,0.802,0.782

可见数值精确度是完全可以的,但是随着误差影响,会有不精确值出现。 

四、扩展探索 

为了进一步精确,并尝试增大样本量后的结果

我们进一步扩大样本量。当有5000个点时,模拟10次,数值为:

0.7780,0.7856,0.8012,0.7746,0.7826,0.7822,0.7792,0.7882,0.7746,0.7860

 

©️2020 CSDN 皮肤主题: 创作都市 设计师:CSDN官方博客 返回首页