使用Clojure编程蒙特卡罗模拟

使用Clojure编程蒙特卡罗模拟,clojure,lisp,Clojure,Lisp,估算π值的蒙特卡罗方法使用随机数生成器模拟省道投掷到省道板上的过程。在这个程序中,你将模拟大量的飞镖投掷,并通过几何概率,根据你的经验结果估计π的值。 假设我们画一个半径为1的圆,圆心在原点(0,0)。这个圆的四分之一位于圆内 笛卡尔坐标平面的第一象限,其中x和y坐标均为非负。这个 我们圆的面积是πr2=π·(1)2=π,因此第一象限中圆的四分之一的面积 是π。我们将在四分之一圆内随机为每个省道生成两个坐标,从而在四分之一圆内投掷省道 区间[0,1];省道可能落下的区域形成边长1和总面积1的正方

估算π值的蒙特卡罗方法使用随机数生成器模拟省道投掷到省道板上的过程。在这个程序中,你将模拟大量的飞镖投掷,并通过几何概率,根据你的经验结果估计π的值。 假设我们画一个半径为1的圆,圆心在原点(0,0)。这个圆的四分之一位于圆内 笛卡尔坐标平面的第一象限,其中x和y坐标均为非负。这个 我们圆的面积是πr2=π·(1)2=π,因此第一象限中圆的四分之一的面积 是π。我们将在四分之一圆内随机为每个省道生成两个坐标,从而在四分之一圆内投掷省道 区间[0,1];省道可能落下的区域形成边长1和总面积1的正方形。省道落在四分之一圆内的概率通过除以目标区域的面积(π)来确定 4. 按可能着陆区域(1)的面积计算。如果我们向棋盘投掷大量飞镖,并计算落在四分之一圆内的飞镖数量,我们可以估计π的值,从而也可以估计π的值。(假设 4. 当然,我们的随机数生成器是真正随机的。)

您将通过实现以下功能在Clojure中编程蒙特卡罗模拟:

  • coord-不接受任何参数,并返回间隔为[0,1]的两个随机生成的坐标的列表。见兰德和罗列

  • 投掷省道-获取表示要投掷多少省道的单个参数n,然后生成长度为n的坐标列表。重复使用以生成一个即时的coord调用序列;使用“获取结果”获取rst n结果

  • 被击中了吗获取包含一个省道坐标的列表,并返回该省道是否落在我们的四分之一圆内。提示:计算从原点到省道坐标的距离,并确定该距离意味着省道落在四分之一圆的内部还是外部

  • 我回答了第一个问题:

    (defun coord () (let ((lst ()))
    (dotimes (i 2)
    (setf lst (cons (random 2) lst)))
    lst))
    

    但是需要另外两个人的帮助。

    评论

    这看起来像是家庭作业,所以假设您在Clojure工作,我将添加提示

  • Clojure有向量文本,例如
    [12“扣我的鞋”]
    , 比列表更容易使用
  • 反复使用
    生成对 (副作用)功能。您需要的函数是
    rand
  • 你只需要求坐标的平方和。这给了
    要清楚的是,距离的平方是Clojure还是Common Lisp?问题是Clojure,但代码看起来像CL。应该是Clojure,但我用Lisp试过了,因为我比Clojure更熟悉Lisp。不,这不是家庭作业。这是我们必须为考试做准备的另一个问题。谢谢你的帮助:)好的。我添加了另一个clojure提示。我很惊讶这竟然是如此不准确——即使有一百万次投掷,我也只能得到两到三个可靠的小数位。