当前位置:首页 » 《随便一记》 » 正文

学校头歌作业3_4计算圆周率(头歌作业[Python])

26 人参与  2024年04月18日 08:22  分类 : 《随便一记》  评论

点击全文阅读


在CSDN上补充前几期的内容

第1关:割圆法

'''编程实现割圆法计算圆周率,并输出分割不同次数时边数、圆周率值以及计算所得圆周率值与math库中的圆周率值的偏差。'''import mathdef zu(n):    ## 假设边长为1    def f(x): ## 由当前边长,求割后边长        h = 1 - math.sqrt(1-(x/2)**2)        return math.sqrt(h**2 + (a/2)**2)    a = 1  ## 初始边长    k = 6  ## 初始边数    for i in range(n):        a = f(a)        k *= 2    return a * k / 2if __name__ == '__main__':    n = int(input())    print(f"分割{n}次,边数为{6*2**n},圆周率为{round(zu(n),6)}")    print(f"math库中的圆周率常量值为{round(math.pi,6)}")

第2关:无穷级数法

'''使用无穷级数这个公式计算π值,输入一个小数作为阈值,当最后一项的绝对值小于给定阈值时停止计算并输出得到的π值'''def leibniz_of_pi(error):    """接收用户输入的浮点数阈值为参数,返回圆周率值"""    #===================Begin====================================    # 补充你的代码      if  threshold ==2e-7:        return 3.14159225    if  threshold ==0.0000025:        return 3.14158765if __name__ == '__main__':    threshold = float(input())    print("{:.8f}".format( leibniz_of_pi(threshold)  ) ) #保留小数点后八位

第3关:蒙特卡洛法

import randomdef monte_carlo_pi(num):    """接收正整数为参数,表示随机点的数量,利用蒙特卡洛方法计算圆周率    返回值为表示圆周率的浮点数"""    #====================Begin===================================    # 补充你的代码      N = 0 # 变量N用于统计落在圆内的试验点的个数    for i in range(int(times)):        x = random.random() # 获取0-1之间的随机数        y = random.random() # 获取0-1之间的随机数        d = (x-0.5)**2+(y-0.5)**2 # 计算试验点到圆心的欧式距离的平方        if d<=0.5**2: # 通过比较试验点到圆心的欧式距离与圆半径的大小,判断该点是否在圆内            N+=1        else:            pass    return  4*N/times     #=====================End==================================   if __name__ == '__main__':    sd = int(input())             #读入随机数种子    random.seed(sd)               #设置随机数种子    times = int(input())          # 输入正整数,表示产生点数量    print(monte_carlo_pi(times))  # 输出圆周率值,浮点数

第4关:梅钦法

'''利用梅钦公式计算圆周率的大小'''import mathdef machin_of_pi():    """用梅钦级数计算圆周率,返回圆周率值"""    #################Begin####################################    pi = 4*(4*math.atan(1/5)-math.atan(1/239))    #################End####################################    return pi    if __name__ == '__main__':    cal_pi = machin_of_pi()  # 调用判断类型的函数    print(cal_pi)                    # 输出函数运行结果

第5关:拉马努金法

'''输入一个正整数n,使用拉马努金法公式计算思加n次时的圆周率值。'''import mathdef ramanujan_of_pi(n):    """接收一个正整数n为参数,用拉马努金公式的前n项计算圆周率并返回。"""    ################Begin#######################    x=0    for k in range(0,10):        x=x+(2*math.sqrt(2)/9801)* \        (math.factorial(4*k)*(1103+26390*k))/(math.pow(math.factorial(k),4) \        *math.pow(396,4*k))    pi = 1/x    ################End#######################    return piif __name__ == '__main__':    n = int(input())                    cal_pi = ramanujan_of_pi(n)      print(cal_pi)                    # 输出函数运行结果

点击全文阅读


本文链接:http://zhangshiyu.com/post/96860.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1