級數法求圓周率


題目

不言而喻,圓周率很重要。
不僅僅是在數學理論上,即便在千年前的古代,工程上的需求,也迫切需要我們知道圓周率的盡量精確的數值。
求圓周率,有很多種方法,級數法就是簡便易行的方法之一。
很多大牛已經把級數公式寫好,並證明清楚,我們只要按公式求值就好了。
暫舉幾例:

\[\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\times3\times4} -\frac{4}{4\times5\times6}+\frac{4}{6\times7\times8}-... \]

請編程求 \(\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

編程是靠實踐的,光看書很難提高啊。。。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM