《用计算机计算圆周率》任务单
一、知识回顾
选择结构流程图:
循环结构流程图:
二、项目探究
项目一:使用随机投点法计算圆周率
※分析问题
1.首先,确定总的投点数darts
2.然后,在边长为1的正方形中投点,并判断这个点是否在扇形区域内,
如果是,则扇形区域的投点数hits增加1。(x2+y2<1,则改点在扇形区域内)
3.最后,在所有点投完后,计算圆周率的近似值pi
※设计算法
※完善程序
(1)参考流程图,在spyder中完善“随机投点法”程序,截图复制到下方:
多次运行程序,改变总投点数,得到不同的圆周率近似值,记录每次的运行结果。
dartsss
pi
的值
准确的小数位数
运行时间(秒)
1000
3.196
1
0.0936006
10000
思考:
1.精确度与投点的数量值是否有关系?
2.同样的投点数量,多次运行结果一样吗?为什么?
3.1亿次投点得到几位PI的准确值?
项目二:使用欧拉公式法法计算圆周率
※设计算法
※完善程序
(1)在spyder中完善“欧拉公式法”程序,截图复制到下方:
(2)输入精确度要求,并输出运行时间。多次运行程序,改变
limit
的值,得到不同的圆周率近似值,记录每次的运行结果。
limit
pi
的值
准确的小数位数
运行时间(秒)
0.0001
3.1320765318091053
1
0.008484839644298251
0.00001
思考:
1.精确度与pi的值是否有关系?
对比两种算法计算圆周率的运行情况,填写下表。
算法比较项目
数学公式法
随机投点法
计算结果的精确度
较高
□较低
□较高
较低
程序运行时间
较长
□较短
较长
□较短
对算法的理解
□容易理解
□不易理解
□容易理解
□不易理解
项目三:编程实现莱布尼茨定理计算圆周率,截图复制到下方:
项目四:编程实现沃利斯公式计算圆周率,截图复制到下方:(共15张PPT)
用计算机计算圆周率
圆周率的由来
01
圆周率π是一个在数学及物理学普遍存在的数学常数。它定义为圆形之周长与直径之比。它也等于圆形之面积与半径平方之比。是精确计算圆周长、圆面积、球体积等几何形状的关键值。
2019年3月14日,日本裔女程序员埃玛在谷歌云平台计算引擎的帮助下完成圆周率小数点后
31.4万亿位的计算。
π
割圆术-刘徽
公元263年
推算pi为近似值3.14
当时世界上最准确数据
祖冲之
公元426-500年
首次将“圆周率”精算到
小数第七位
回望古今中外历代数学家对于圆周率的探索
…
圆周率的pai值
π
=
3.
14159
26535
89793
23846
26433
83279
50288
41971
69399
37510
58209
74944
59230
78164
06286
20899
86280
34825
34211
70679?
设计算法实现随机投点法计算
02
随机投点法是通过在正方形内随机投点,用随机模拟的方法来估算圆周率。
设hits为落在扇形内的豆子数,总豆子数为darts,则:
蒙特卡罗法
二十世纪四十年代中期
由圆周率等于圆的面积与半径平方之比可知:
设计算法实现随机投点法计算
02
蒙特卡罗法
二十世纪四十年代中期
首先,确定总的投点数darts
01
然后,在边长为1的正方形中投点,并判断这个点是否在扇形区域内,如果是,则扇形区域的投点数hits增加1。(x2+y2<1,则改点在扇形区域内)
02
最后,在所有点投完后,计算圆周率的近似值pi
03
设计算法实现随机投点法计算
02
蒙特卡罗法
二十世纪四十年代中期
算法描述:
hits=0
输入darts
for
i
in
range(darts):
随机产生两个
[0,1)之间小数x,y
#表示投点的位置坐标
if
(x,y)点落在扇形内:
hits加1
输出4
hits/darts
活动1:体验“随机投点法
(学生).py”程序
02
在spyder下打开“随机投点法(学生).py”程序,完善(1)(2)两个空白处,运行并输入不同投点数量,观察程序运行结果与时间,填写在任务单中。
思考:
1.精确度与投点的数量值是否有关系?
2.同样的投点数量,多次运行结果一样吗?为什么?
3.1亿次投点得到几位PI的准确值?
π
是否可以用其他数学公式得到π值?
设计算法实现数学公式计算
03
数学家欧拉的公式:
莱昂哈德·欧拉
18世纪
算法:
(1)计算s=1+1/(2^2)+1/(3^2)+…(求若干项)
(2)pi=sqrt(6
s)
(3)输出pi
设计算法实现数学公式计算
03
赋初值:s=0,n=1
结束条件:
怎么写?
计算:s=s+1/(n
2)
改变循环控制的值:n+=1
思考结束条件:
1.计算到1000
000项结束
2.当累加项的值小于
0.000
001结束
活动2:体验“欧拉公式(学生).py”程序
03
在spyder下运行“欧拉公式(学生).py”程序,并输入不同精确度,观察程序运行结果与时间,填写在任务单中。
思考:
精确度与pi的值是否有关系?
小结:
04
1、两种算法对比(不同算法效率、精度等各不相同)
扩展1:π的莱布尼茨公式
05
?
?
如何用编程实现?
06
?
?
如何用编程实现?
扩展2:沃利斯公式
数学家沃利斯(J.Wallis)的公式:
谢
谢!用计算机计算圆周率
【课标要求】
?
??掌握一种程序设计语言的基本知识,使用程序设计语言实现简单算法。通过解决实际问题,体验程序设计的基本流程,感受算法的效率,掌握程序调试与运行的方法。
【教学目标】
1、理解用for循环、while循环进行数值计算,培养学生计算思维
2、编程实现两种计算圆周率的算法,探究程序控制过程。
3、对比不同程序,感受不同算法的效率。
4、通过几种求PI方法研究激发学生科学研究的兴趣。
【重点与难点】
教学重点:?理解蒙特卡罗法、欧拉公式法求解圆周率原理及程序实现
教学难点:?了解英国天文学教授约翰·马青公式法求解圆周率
【核心教学内容】
?
?1、分析不同方法中公式计算中重复操作,引入适当循环结构进行控制。
?
?
?2、分析不同方法收敛精确值的速度,产生计算误差原因等。
【学情分析】
?
??学生通过上三节课的学习,初步了解for、while循环格式及功能(执行过程),同时他们通过一些实际例子,能从问题本身出发,发现循环结构,并分析用哪一种语句进行程序控制循环程序设计。本节通过几种圆周率计算过程,进一步巩固循环结构程序的应用,体验循环结构程序带来强大的计算能力。
【教学方法及手段】
?
??方法:应用问题分析法,引导学生分析问题,发现问题中包含的重复运算(循环),进而选择某种语句实现循环控制。
?
??手段:充分利用希沃大屏幕或触摸屏交互功能,引导学生从公式出发,发现公式中的循环结构,并将算法描述出来。
【教学过程】
第1课时
教学环节
教师活动
学生活动
导入新课(3分钟)
01圆周率的由来圆周率π是一个在数学及物理学普遍存在的数学常数。它定义为圆形之周长与直径之比。它也等于圆形之面积与半径平方之比。是精确计算圆周长、圆面积、球体积等几何形状的关键值。古今中外,一代代数学家为探求圆周率的值贡献出了自己的智慧和辛劳。魏晋时期的刘徽(图3-25)在公元263年提出了著名的割圆术,得出π≈3.14。南北朝时期的祖冲之进一步得出精确到小数点后7位的圆周率值,这一成就在世界上领先了一千多年。计算机发明之后,人们开始借助计算机来计算圆周率,并为之设计了许多算法。随着计算机性能的快速提升,计算机计算出的圆周率精确位数不断被刷新。2019年3月14日,日本裔女程序员埃玛在谷歌云平台计算引擎的帮助下完成圆周率小数点后31.4万亿位的计算。?
?本节我们将体验几种用不同方法利用计算机计算圆周率。
倾听
02?蒙特卡罗法求圆周率(5分钟)
蒙特卡罗法:?
??随机投点法是通过在正方形内随机投点,用随机模拟的方法来估算圆周率。?
??设hits为落在扇形内的豆子数,总豆子数为darts,则:?
?
?hits/darts=s扇形/s正=1/4
pi
r
r/(r
r)=pi/4.?
?
?pi=4
hits/darts算法描述:hits=0输入dartsfor
i
in
range(darts):?
??随机产生两个?[0,1)之间小数x,y?
?#表示投点的位置坐标?
?
if
sqrt(x
x+y
y)<1:?
???
?
?
?
#投点落在扇形内?
?
?
?
hits=hits+1输出4
hits/darts
观看、思考、讨论、回答。
02?活动1:体验“蒙特卡罗?(学生).py”程序(5分钟)
在spyder下打开并运行桌面上“下发文件夹”中的“蒙特卡罗(学生).py”程序,并输入不同投点数量,观察程序运行结果与时间。思考:1.?
?精确度与投点的数量值是否有关系?2.?
?同样的投点数量,多次运行结果一样吗?为什么?3.?
?1亿次投点得到几位PI的准确值?
学生实践
03设计算法实现欧拉公式计算PI(5分钟)
数学家欧拉的公式:算法:(1)计算s=1+1/(2^2)+1/(3^2)+…(求若干项,直到精度?
?
?
?
s=0?
?
?
?
?
s=s+1/1?
?
?
?
?
s=s+1/(2
2)?
?
?
?
?
……?
?
?
?
?
s=s+1/(i
i)?
?
?
?
?
……(2)pi=sqrt(6
s)(3)输出pi
观看、思考、讨论、回答。
03活动2:体验“欧拉公式(学生).py”程序(5分钟)
在spyder下打开并运行桌面上“下发文件夹”中的“欧拉公式(学生).py”程序,并输入不同精确度,观察程序运行结果与时间。思考:1.精确度与pi的值是否有关系?2.精确度能否无限小下去?3.计算的误差如何产生?
学生实践
04利用马青公式计算圆周率π的值到任意位(10分)
这个公式由英国天文学教授约翰·马青于1706年发现。他利用这个公式计算到了100位的圆周率。可以证明马青公式每计算一项可以得到1.4位的十进制精度。以下程序充分利用python中支持的大整数乘法与整除特点,能够很快得到指定位数精确值,实现简单。
观看、思考、讨论、回答。
04?活动3:马青公式法程序学习与体验(5分)
from
__future__
import
divisionimport
timetime1=time.time()################算法根据马青公式计算圆周率####################number
=
int(input('请输入想要计算到小数点后的位数n:'))#
多计算10位,防止尾数取舍的影响number1
=
number+10#
算到小数点后number1位b
=
10
number1#
求含4/5的首项x1
=
b
4//5#
求含1/239的首项x2
=
b//
-239#
求第一大项he
=
x1+x2#设置下面循环的终点,即共计算n项number
=
2#循环初值=3,末值2n,步长=2for
i
in
range(3,number,2):?
?#
求每个含1/5的项及符号?
?x1
//=
-25?
?#
求每个含1/239的项及符号?
?x2
//=
-57121?
?#
求两项之和?
?x
=
(x1+x2)
//
i?
?#
求总和?
?he
+=
x#
求出πpai
=
he
4#舍掉后十位pai
//=
10
10############
输出圆周率π的值paistring=str(pai)result=paistring[0]+str('.')+paistring[1:len(paistring)]print(result)time2=time.time()print(u'总共耗时:'
+
str(time2
-
time1)
+
's')
学生实践
小结(2分)
1、三种算法对比(不同算法效率、精度等各不相同)2、发现公式中的重复计算部分,再利用循环语句来实现计算,这是数值计算的关键。
课后作业:编程利用沃利斯公式计算PI
P95页,编程利用数学家沃利斯(J.Wallis)的公式(如下),求PI。算法:(1)计算:?
?
?
?
s=(2/1)
(2/3)
(4/3)
(4/5)
…(i+1)
(i+1)/(i
(i+2))
…(i=1,3,5,…)(2)pi=2
s(3)输出pi