“圆周率的计算”实例详解
“圆周率的计算”问题分析:当我们要计算圆周率的时候,我们有两种方法进行计算,第一种方法为使用公式计算,第二种为使用蒙特卡罗方法。圆周率的近似计算公式:圆周率的蒙特卡罗方法:圆周率本身就是一个圆形,而蒙特卡罗方法即为将以正方形的边长的一半为半径进行画圆,而这个圆正好在正方形的界内,那么圆周率即为用圆的面积去除以正方形的面积。而如何计算这个结果,我们可以先求,即为这个图形的。在这个图形里面,我们可以将
“圆周率的计算”问题分析:
当我们要计算圆周率的时候,我们有两种方法进行计算,第一种方法为使用公式计算,第二种为使用蒙特卡罗方法。
圆周率的近似计算公式:

圆周率的蒙特卡罗方法:
圆周率本身就是一个圆形,而蒙特卡罗方法即为将以正方形的边长的一半为半径进行画圆,而这个圆正好在正方形的界内,即为正方形的内切圆,那么圆周率与圆的面积去除以正方形的面积的商有关系。
而如何计算这个结果,我们可以先求,即为这个图形的
。在这个
图形里面,我们可以对
正方形进行撒点,撒满之后,在正方形内的点构成了正方形的面积,在圆内的点构成了圆的面积。通过
正方形点的数量与圆方形中所撒的点的比值就能够计算出
圆的面积,然后乘4即为圆的面积。因为正方形的面积好求解,通过两者比值即可求出圆的面积。
对于求解圆周率的近似公式法我们可以进行编写代码
具体代码如下:
pi=0 #定义的初始值为0
N=100 #设置循环的数量或者累加的数量为100
for k in range(N):
pi+=1/pow(16,k)*(4/(8*k+1)-2/(8*k+4)-1/(8*k+5)-1/(8*k+6)) #当一行代码足够长导致放不下的时候,我们可以使用\进行换行。
print("圆周率的数值是:{}".format(pi))
即使用\进行换行如下所示一般:
pi=0#定义一个初始值为0
N=100 #设置循环的数量为或者累加的数量为100
for k in range(N):
pi+=1/pow(16,k)*(4/(8*k+1)-\
2/(8*k+4)-1/(8*k+5)-\
1/(8*k+6))
print("圆周率的数值是:{}".format(pi))
运行界面如下所示:

对于求解圆周率的蒙特卡罗方法我们可以进行编写代码
具体代码如下:
from random import random #进行调用random库获取随机数
from time import perf_counter #进行调用time库获取perf_counter()进行计算所运行的时间
DARTS=1000*1000 #在当前正方形的区域内抛洒点的总数量
hits=0.0 #目前在圆的内部的点的数量
start=perf_counter()
for i in range(1,DARTS+1):
x,y=random(),random() #所抛洒的随机点用随机坐标表示
dist=pow(x**2+y**2,0.5) #所求取的值为随机点到圆心的距离。
if dist<=1.0: #如果点到直线的距离小于1,则在圆内。即判断点到圆心的距离,如果大于1的话则在圆外,即正方形区域内,如果等于1,即在圆上,如果小于1,即在圆内。
hits=hits+1 #如果在圆内,即覆盖在圆内的点进行加1.
pi=4*(hits/DARTS) #所求比值为的圆,进行乘以4,即可求取整个圆的圆周率,圆的圆周率与内切圆与正方形的比值有关。
print("圆周率值是{}".format(pi))
print("消耗的时间为{}".format(perf_counter()-start))
运行界面如下:

举一反三:
理解方法思维
数学思维:找到公式,利用公式进行求解。
计算思维:抽象一种过程,用计算机自动化求解
程序运行时间分析
使用time库的计时方法获得程序运行时间
改变撒点数量,理解程序运行时间的分布,时间大部分都花在了循环代码上。
初步掌握简单的程序性能分析方法。
计算问题的扩展
不求解圆周率,而是某个特定圆形的面积
在工程计算中寻找蒙特卡罗方法的应用场景
更多推荐


所有评论(0)