蒙特卡罗模拟了大量的试验

时间:2015-03-11 08:33:21

标签: python probability

考虑以下计划。

import math
import random

def inside_unit_circle(point):
    """
    Compute distance of point from origin
    """
    distance = math.sqrt(point[0] ** 2 + point[1] ** 2)
    return distance < 1


def estimate_mystery(num_trials):
    """
    Main function
    """
    num_inside = 0

    for dumm_idx in range(num_trials):
        new_point = [2 * random.random() - 1, 2 * random.random() - 1]
        if inside_unit_circle(new_point):
            num_inside += 1

    return float(num_inside) / num_trials

print estimate_mystery(10000)

此程序使用random.random()生成一组随机点,这些点均匀分布在正方形上,角点位于

(1, 1) (−1, 1)
(1,−1) (−1,−1)

这里,均匀分布意味着正方形中的每个点具有相等的生成机会。然后,该方法测试这些点是否位于单位圆内。

随着试验次数的增加,estimate_mystery返回的值趋于特定值,该值具有涉及众所周知常数的简单表达式。在下面输入此值作为数学表达式。 (不要输入浮点数。)

1 个答案:

答案 0 :(得分:1)

因此,您需要使用越来越多的试验来运行estimate_mystery。当您这样做时,很明显该值会增加到以下简单表达式:

formula

\sum_{k=1}^{\infty} \frac{e^{i\pi(k+1)}}{2k-1}

然而,应该指出,这不是唯一正确的答案。以下也是有效的,\zeta是Riemann zeta函数:

formulaalternate

但是,这不包括众所周知的常量e


我不确定为什么这会令人困惑。很明显,和表达式是正确的,并且写得非常清楚:图像下面的代码是数学表达式的非常标准的LaTeX格式。但是为了说明它的正确性,这里有一个图表显示了将总和带到n时的收敛,以及将estimate_mystery运行到n:

enter image description here


嗯...也许这不是你想要的问题?它也应该收敛到以下内容,其中\gamma是复平面上z=0周围的单位圆:

enter image description here

-i\oint_\gamma z^{-3}e^{\frac{z}{2}}dz