项目中用到了蒙特卡洛算法,之前没有接触过,还比较陌生.于是学习了一番,用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 | 边城网事
联系客服