博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
π的计算
阅读量:5757 次
发布时间:2019-06-18

本文共 1052 字,大约阅读时间需要 3 分钟。

圆周率π是一个无理数,没有任何一个精确公式能够计算π值, π的计算只能采用近似算法。 

国际公认的PI值计算采用蒙特卡洛方法。 

 

蒙特卡洛(Monte Carlo)方法,又称随机抽样统计试验方法。

  当所求解问题是某种事件出现的概率,或某随机变量期望值时,可以通过某种“试验”的方法求解。

  即:蒙特卡洛是利用随机试验求解问题的方法。 

 

蒙特卡洛方法

   蒙特卡洛方法提供了一个利用计算机中随机数和随机试验解决现实中无法通过公式求解问题的思路

   它广泛应用于金融工程学,宏观经济学,计算物理学(如粒子输运计算、量子热力学计算、空气动力

    学计算)等领域中。

 

蒙特卡洛方法求解π的步骤:

  首先构造一个单位正方形和1/4圆

  

  随机向单位正方形和圆结构抛洒大量点,对于每个点,可能在圆内或者圆外,当随机抛点数量达

到一定程度,圆内点将构成圆的面积,全部抛点将构成矩形面积。圆内点数除以圆外点数就是面积之

比,即π/4。随机点数量越大,得到的π值越精确。

 

π计算问题的IPO表示如下:

   输入:抛点的数量

   处理:对于每个抛洒点,计算点到圆心的距离,通过距离判断该点在圆内或是圆外。

       统计在圆内点的数量

   输出:π值

1 #pi.py 2 from random import random 3 from math import sqrt 4 from time import clock 5 DARTS = 1200 6 hits = 0 7 clock() 8 ###核心代码 9 for i in range(1, DARTS):10     x, y = random(), random()   #random() 给出随机的坐标值(x,y)11     dist = sqrt(x**2 + y**2)    #sqrt() 计算抛点到原点距离12     if dist <= 1.0:             #判断是否落在圆内13         hits = hits + 114 pi = 4 * (hits/DARTS)15 ###16 print("pi的值是 %s" % pi)17 print("程序运行时间是 %-5.5ss" % clock())

 结果:

  

   由于DARTS点数量较少,π的值不是很精确。

 

 

转载于:https://www.cnblogs.com/aze-003/p/5127192.html

你可能感兴趣的文章
apache安装报错undefined reference ssl
查看>>
java.lang.UnsatisfiedLinkError:no dll in java.library.path终极解决之道
查看>>
【跃迁之路】【460天】程序员高效学习方法论探索系列(实验阶段217-2018.05.11)...
查看>>
C++入门读物推荐
查看>>
TiDB 源码阅读系列文章(七)基于规则的优化
查看>>
webpack+typescript+threejs+vscode开发
查看>>
微信分销系统商城营销5大重点
查看>>
求职准备 - 收藏集 - 掘金
查看>>
后端技术精选 - 收藏集 - 掘金
查看>>
C++与MySQL的冲突
查看>>
siki学习之观察者模式笔记
查看>>
spring.net 继承
查看>>
jQuery|元素遍历
查看>>
用 ThreadLocal 管理用户session
查看>>
setprecision后是要四舍五入吗?
查看>>
上云就是这么简单——阿里云10分钟快速入门
查看>>
MFC多线程的创建,包括工作线程和用户界面线程
查看>>
我的友情链接
查看>>
FreeNAS8 ISCSI target & initiator for linux/windows
查看>>
PostgreSQL数据库集群初始化
查看>>