【问题标题】:Monte Carlo simulations by large no of trials大量试验的蒙特卡罗模拟
【发布时间】:2015-05-12 22:55:33
【问题描述】:

考虑以下程序。

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 返回的值趋向于一个特定的值,该值具有一个包含众所周知的常数的简单表达式。在下面输入此值作为数学表达式。 (不要输入浮点数。)

【问题讨论】:

  • 您忘记复制作业中的实际问题
  • 并复制代码....

标签: python probability


【解决方案1】:

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

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

但是应该注意,这不是唯一正确的答案。以下内容也是有效的,其中\zeta 是黎曼 zeta 函数:

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


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


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

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

【讨论】:

  • 你的表达我不清楚。认真写
  • 我试图添加一些说明,但我不确定如何更仔细或更清楚地编写表达式。
【解决方案2】:

如果您尝试 estimate_mystery() 方法使用不同的输入,例如 with, 100, 1000, 10000, 100000),您将看到相应的结果为 0.81, 0.781 0.7807 0.7855。

这意味着,你增加的试验次数越多,结果越接近(收敛)到 0.7855。这个数字可以用 Pi 来定义。

你可以通过简单的计算找到它。 Pi * x = 0.7855。从这个方程我们可以发现 x ~ 0.25。因此,0.7855可以用Pi/4来描述。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-26
    • 2015-02-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多