027 实例6-圆周率的计算

Posted nickchen121

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了027 实例6-圆周率的计算相关的知识,希望对你有一定的参考价值。

一、"圆周率的计算"问题分析

圆周率的近似计算公式

\[ \pi = \sum_k=0^\infty[\frac116^k(\frac48k+1-\frac28k+4-\frac18k+5-\frac18k+6)] \]

1.1 蒙特卡罗方法

技术图片

二、"圆周率的计算"实例讲解

圆周率的近似计算公式

\[ \pi = \sum_k=0^\infty[\frac116^k(\frac48k+1-\frac28k+4-\frac18k+5-\frac18k+6)] \]

# CalPiV1.py

pi = 0
N = 10
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))
圆周率值是: 3.1333333333333333
圆周率值是: 3.1414224664224664
圆周率值是: 3.1415873903465816
圆周率值是: 3.1415924575674357
圆周率值是: 3.1415926454603365
圆周率值是: 3.141592653228088
圆周率值是: 3.141592653572881
圆周率值是: 3.141592653588973
圆周率值是: 3.1415926535897523
圆周率值是: 3.1415926535897913

2.1 蒙特卡罗方法

技术图片

# CalPiV2.py

from random import random
from time import 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:
        hits = hits + 1
        
pi = 4 * (hits / DARTS)
print("圆周率值是: ".format(pi))
print("运行时间是: :.5fs".format(perf_counter() - start))
圆周率值是: 3.141148
运行时间是: 0.77535s

三、"圆周率的计算"举一反三

技术图片

3.1 理解方法思维

  • 数学思维:找到公式,利用公式求解
  • 计算思维:抽象一种过程,用计算机自动化求解
  • 谁更准确? (不好说…)

3.2 程序运行时间分析

  • 使用time库的计时方法获得程序运行时间
  • 改变撒点数量,理解程序运行时间的分布
  • 初步掌握简单的程序性能分析方法

3.3 计算问题的扩展

技术图片

  • 不求解圆周率,而是某个特定图形的面积
  • 在工程计算中寻找蒙特卡罗方法的应用场景

以上是关于027 实例6-圆周率的计算的主要内容,如果未能解决你的问题,请参考以下文章

Python——程序结构控制(模块3: random库的使用)(实例:身体质量指数BMI及圆周率的计算)

现代计算机是如何计算圆周率的?

PAT-计算圆周率

计算圆周率(Python123)

7-15 计算圆周率(15 分)

第十二章 圆周率的计算问题分析