1. 程式人生 > 其它 >級數法求圓周率

級數法求圓周率

題目

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

\[\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

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