当前位置: 首页 > Scala, 算法 > 正文

scala计算π近似值 — 基于蒙特卡洛算法

项目中用到了蒙特卡洛算法,之前没有接触过,还比较陌生.于是学习了一番,用Scala实现了一个经典的例子:计算π的近似值.

网上搜索了下,蒙特卡洛(Monte Carlo)算法起源于二战时研制原子弹的”曼哈顿计划”,创始人之一就有大名鼎鼎的冯诺依曼大牛.蒙特卡洛是以一个赌城的名字命名的(还有一个相关的算法叫拉斯维加斯算法).

算法的主要思想,如果用学术的语言来描述比较难明白,使用经典的计算π的近似值的例子来说明,则比较好理解.
计算思路如下图,这里用scala语言实现算法.

object TestMonteCarlo {
  def main(args: Array[String]): Unit = {
    println(calculatePi(10000000))
  }

  def calculatePi(sampleSize:Int = 10000):Double = {
    val radius = 1.0;
    val cycleCenter = (1.0,1.0)
    val (x0,y0) = cycleCenter
    val random:util.Random = new util.Random()

    val loop =  1 to sampleSize
    var pointInCycle = 0
    loop.foreach(_ => {
      val randomPoint = (random.nextDouble() * 2,random.nextDouble() * 2) //
      val (x1,y1) = randomPoint
      val disToCenter = Math.sqrt(Math.pow(x1-x0,2) + Math.pow(y1 - y0 ,2))
      if(disToCenter <= radius) { pointInCycle += 1 }
    })
    println(s"point In Cycle = ${pointInCycle}")
    (pointInCycle * 4) * 1.0 / sampleSize
  }
}

 

赞 赏

   微信赞赏  支付宝赞赏


本文固定链接: https://www.jack-yin.com/coding/scala/2718.html | 边城网事

该日志由 边城网事 于2018年09月07日发表在 Scala, 算法 分类下, 你可以发表评论,并在保留原文地址及作者的情况下引用到你的网站或博客。
原创文章转载请注明: scala计算π近似值 — 基于蒙特卡洛算法 | 边城网事
关键字: ,

scala计算π近似值 — 基于蒙特卡洛算法 暂无评论

发表评论

快捷键:Ctrl+Enter