Monte Carlo method
in python with 0 comment

Monte Carlo method

in python with 0 comment

我们周围似乎存在着很多无法求出精确解的问题,蒙特卡洛方法(Monte Carlo method)可能会是一种十分精巧的求出近似解的方式。

一个典型的栗子

一般人对于 π 的取值基本的认知范围是(3.1415926~,3.1415927)。有些记忆力好的人可能会背过数万位。

当前人类计算π的值的主要原因为打破记录、测试超级计算机的计算能力和高精度乘法算法,因为几乎所有的科学研究对π的精度要求都不会超过几百位。

在一般的生活中,我们大多能接受 π 的近似值为3.14。
如何计算?
假如存在以下的一个模型:
Ckupqg.png
假设一个单位圆和其外切正方形,已知圆的面积公式是,πR^2。正方形的面积公式是,R^2。即圆的面积除以正方形的面积即是 π 的取值。

如果在正方形内随机取一点,该区域的每个点被取到的概率是相同的。这样符合了几何概型的定义(如果每个事件发生的概率只与构成该事件区域的长度(面积或体积或度数)成比例,则称这样的概率模型为几何概率模型,简称为几何概型。)。

极限一下,如果在正方形中选取了 N 个点,恰好是正方形的所有点。其中有 M 个点在圆中。那 π=M/N。

此时可以设计一个简单的算法进行统计:

from random import uniform


def pi(times):

    hits = 0
    for i in range(times):

        x = uniform(-1, 1)
        y = uniform(-1, 1)

        if (x**2 + y**2) - 1 <= 0:
            hits += 1
    return 4.0 * hits / times

在经历过多次模拟后进行了数据统计,模拟一亿次,每一百万次记录一次当时情况下计算的数据:
CklRcq.png

大体能够看出所计算的 π 值在逐步接近真实数据。尽管这样计算可以得到较为接近的数据,但与真实数据始终存在偏差。这是因为计算机产生的随机数仅能包含有理数,而无理数不会出现。

Comments are closed.