python实验2 π的计算

1. 圆周率的介绍

  1. 圆周率π自古就是人们计算的问题,π到底是什么,圆的周长与直径的比值或者是面积与半径的平方之比,或者是使sinx=0的最小正数x。所以每一种定义每一种理解都是对应着一种解法,每一种定义都是数学中不同门类对应着对π的理解,也就是各自门类的解法。
  2. 常见的计算方法割圆术、无穷级数(拉马努金圆周率公式、BBP公式……)、其他级数(自然数倒数偶次方和、泰勒展开……)、微积分……(方法有很多我就不一一举例了,如果想要探索更多方法看这个博主写的文章就好了)

2. BBP公式计算圆周率

  1. 公式
    在这里插入图片描述
  2. 证明:刚刚提到的文章(以后会更新
  3. 代码
    import math
    
    
    def  bbp_pi(digits):
        pi = 0
        for k in range(digits):
            term = (1 / 16**k) * (
                (4 / (8 * k + 1)) - (2 / (8 * k + 4)) - (1 / (8 * k + 5)) - (1 / (8 * k + 6))
            )
            pi += term
        return pi
    
    # 指定所需的小数位数
    decimal_places = 100
    calculated_pi = bbp_pi(decimal_places)
    
    print("计算得到的π值:", calculated_pi)
    
    
  4. 运行结果
    计算得到的π值: 3.141592653589793
    请按任意键继续. . .
    

3. 蒙特卡洛方法计算π

  1. 原理
    在这里插入图片描述
  2. 代码
    from random import random
    from math import sqrt
    from time import clock
    DARTS = 1000# 一共投掷的点数
    hits = 0.0# 范围内的点数
    clock()计时
    for i in range(1, DARTS+1):
        x, y = random(), random()
        dist = sqrt(x ** 2 + y ** 2)# 计算点到圆心的距离先求横纵坐标的平方和再求算数平方根
        if dist <= 1.0:
            hits = hits + 1
    pi = 4 * (hits/DARTS)
    print("Pi值是{}.".format(pi))
    print("运行时间是: {:5.5}s".format(clock()))
    
  3. 运行结果
    Pi值是3.144.
    请按任意键继续. . .
    
Python计算π(圆周率)的值通常可以使用多种方法,比如蒙特卡洛方法、泰勒级数、阿基米德算法等。这里以蒙特卡洛方法为例,来说明如何计算π值并计算误差。 蒙特卡洛方法是一种统计学方法,通过随机抽样来计算数值解。对于π的计算,可以通过随机生成点并判断这些点是否落在单位圆内来进行估算。具体步骤如下: 1. 在正方形内随机生成一个点(x, y),正方形的边长为2(即x, y的取值范围都是[-1, 1])。 2. 计算点到原点的距离r,判断r是否小于等于1(即点是否在单位圆内)。 3. 重复步骤1和2多次(进行多次随机实验),统计落在单位圆内的点数n与总点数m的比值。 4. 通过比值n/m近似计算π值,因为单位圆的面积是π,而正方形的面积是4,所以n/m接近π/4。 误差计算可以通过公式:误差 = |真实值 - 近似值|。在计算π的情况下,真实值是已知的(大约为3.14159),近似值是我们通过蒙特卡洛方法计算得到的值。 下面是一个简单的Python代码示例,用蒙特卡洛方法计算π值并计算误差: ```python import random def estimate_pi(num_points): inside_circle = 0 for _ in range(num_points): x = random.uniform(-1, 1) y = random.uniform(-1, 1) if x**2 + y**2 <= 1: inside_circle += 1 pi_estimate = (inside_circle / num_points) * 4 return pi_estimate # 使用100000个点进行估算 pi_approximation = estimate_pi(100000) print(f"估算的π值为: {pi_approximation}") # 计算误差 true_pi = 3.141592653589793 error = abs(true_pi - pi_approximation) print(f"误差为: {error}") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值