zoukankan      html  css  js  c++  java
  • 级数法求圆周率

    题目

    不言而喻,圆周率很重要。
    不仅仅是在数学理论上,即便在千年前的古代,工程上的需求,也迫切需要我们知道圆周率的尽量精确的数值。
    求圆周率,有很多种方法,级数法就是简便易行的方法之一。
    很多大牛已经把级数公式写好,并证明清楚,我们只要按公式求值就好了。
    暂举几例:

    [frac{pi^2}{6} = frac{1}{1^2} + frac{1}{2^2} + frac{1}{3^2} + ... ]

    [frac{pi}{4}=frac{1}{1}-frac{1}{3}+frac{1}{5}-frac{1}{7}+... ]

    [pi = 3 + frac{4}{2 imes3 imes4} -frac{4}{4 imes5 imes6}+frac{4}{6 imes7 imes8}-... ]

    请编程求 (pi) 的值。

    分析与提示

    对每个公式单独写一个程序有点浪费代码,能不能做一个类似级数框架的东东,把这个方法的共性表达出来呢?
    这些算法,无外乎是: 初始值 + 若干的小项,求和,最后再处理一下,得出 (pi) 的值。

    示例解法

    点击查看代码
    import math
    
    a1 = 0
    def b1(n):
        return 1/(n*n)
    def c1(x):
        return math.sqrt(x*6)
    
    a2 = 0
    def b2(n):
        return (-1)**(n+1)/(2*n-1)
    def c2(x):
        return 4*x
    
    a3 = 3
    def b3(n):
        return (-1)**(n+1)*4/(2*n*(2*n+1)*(2*n+2))
    def c3(x):
        return x
    
    # a: 初始值
    # b: 通项公式(函数)
    # c: 后处理(函数)
    # n: 累加项数
    def f(a,b,c,n):
        z = a
        for i in range(n):
            z += b(i+1)
        return c(z)
    
    ####
    print(f(a1,b1,c1,10000))
    print(f(a2,b2,c2,10000))
    print(f(a3,b3,c3,100))
    

    需要更多的题目和题解?

    其它的题目懒得贴了,自己下载吧:
    《2021年新版-编程基础训练32题-附提示和答案》
    链接: https://pan.baidu.com/s/1ZubWEUab1aCxEVWjBaRCDQ
    提取码: aeha

    编程是靠实践的,光看书很难提高啊。。。

  • 相关阅读:
    (22)进程和线程区别
    (21)回调函数
    (20)gevent协程
    (18)ProcessPoolExecutor进程池
    (19)ThreadPoolExecutor线程池
    (17)线程队列---queue LifoQueue PriorityQueue
    (16)线程---定时器Timer
    (15)线程---Condition条件
    (14)线程- Event事件和守护线程Daemon
    IDEA快速搭建WEB项目【记录篇】
  • 原文地址:https://www.cnblogs.com/gyhang/p/15393932.html
Copyright © 2011-2022 走看看