古老的難題:曲線下方的面積
矩形的面積你閉著眼都能算:寬乘以高。三角形、圓、梯形——幾何為每一種都遞給你一個公式。可現在畫一條起伏的曲線,比如 y = x^2,問你被這條曲線、x 軸,以及 x = a 和 x = b 兩條豎線圍住的面積是多少。書後面沒有現成的公式。上邊緣是彎的,所以沒有哪個單一的「寬乘高」管用。這就是面積問題,在微積分馴服它之前,人們和它纏鬥了兩千年。
那個突破性的想法很謙卑:如果你沒法一口氣量出彎彎曲曲的區域,那就用你*能*量的形狀去把它鋪滿。把從 a 到 b 的區間切成一排細長的豎長條。每條都有一個彎的頂,可只要它夠窄,那個頂就幾乎是平的——於是就把這條當成一個普通矩形。把所有矩形面積加起來,你就得到了整體的一個估計。它會差一點點,但只差一點點,而這點誤差,是我們能夠擠壓掉的。
黎曼和:切、量、加
我們把這個計劃說精確。取從 a 到 b 的區間,把它分成 n 個相等的小段。每一段的寬度是 dx = (b - a) / n。在第 i 條長條裡,挑一個取樣點 x_i,量出曲線在那裡的高度 f(x_i),把這條當成一個高為 f(x_i)、寬為 dx 的矩形。它的面積是 f(x_i) * dx。把這 n 個全加起來,你就有了一個[[riemann-sum|黎曼和]]:
Riemann sum = f(x_1)*dx + f(x_2)*dx + ... + f(x_n)*dx
= sum from i = 1 to n of f(x_i) * dx
where dx = (b - a) / n在每條長條裡,你該讀哪裡的高度?你有得選,而這個選擇給這個和起了名字。讀每條左邊緣的高度,你得到左黎曼和;讀右邊緣,是右黎曼和;讀正中間,是中點和,通常它貼真值貼得最緊。對一條光滑曲線,當 n 很小時這些彼此略有出入——可隨著長條變細,它們的分歧朝著「無」收縮。
- 決定你要多少條長條 n,並算出寬度 dx = (b - a) / n。
- 在每條長條裡,選一個取樣點(左、右或中間),量出那裡的高度 f(x_i)。
- 把每個矩形的面積取作 f(x_i) * dx,再把這 n 個全部累加成一個總和。
- 現在增大 n——翻一倍,再翻一倍——看這個總和是否朝著一個固定的數字安頓下來。
把和變成一個數字的那個極限
這就是它的核心。黎曼和只是個估計,任何有限的 n 都會讓它略有偏差。可把 n 往上推——長條更多、每條更細、dx 朝著 0 收縮——一條規規矩矩的曲線就會讓這個和逼向某一個固定的值。f 從 a 到 b 的[[definite-integral|定積分]],*被定義*為當 n -> 無窮(等價地,當 dx -> 0)時,這些和的[[limit|極限]]。它不是那個和本身;它是這些和所趨向的那個數字。我們這樣把它寫下來:
integral from a to b of f(x) dx = lim (n -> infinity) sum from i = 1 to n f(x_i) * dx The elongated S (the integral sign) is a stretched 'sum'. The dx is the leftover width of each slice, shrunk to nothing.
而結果是一個單一的數字,不是一個函數。f 從 a 到 b 的定積分,把整段區間一口吞下,報出一個值——從速度曲線得到的總距離,從電流得到的總電荷,從賺錢速率得到的總利潤。這就是「定」的意思:上下界 a 和 b 被釘死了,所以答案是確定的、是數值。(把界去掉,你得到的是別的東西——一個[[antiderivative|原函數]],一整族函數——接下來的台階會把它連回到這裡。)
用幾行代碼看著它收斂
空談是廉價的;我們就把這個極限跑一遍。我們用左黎曼和去近似 f(x) = x^2 從 0 到 1 的積分,然後把 n 搖大,看這個總和逼近過來。精確答案——下一級台階會讓你能用手算出來——是 1/3。
def f(x):
return x * x
a, b = 0.0, 1.0
for n in [4, 10, 100, 1000, 100000]:
dx = (b - a) / n
total = 0.0
for i in range(n):
x_i = a + i * dx # left edge of strip i
total += f(x_i) * dx
print(n, total)
# n Riemann sum
# 4 0.21875
# 10 0.285
# 100 0.32835
# 1000 0.3328335
# 100000 0.33333283... -> heading for 1/3盯著那一列數字一點點爬向 0.3333…,就是整個概念的縮影。我們從來沒有真的加完無窮多片——沒有哪台計算機能辦到——但我們也不需要。我們只需要看出*這些總和在奔向哪裡*,而一個光滑的函數對此毫不含糊。那個歸宿,就是定積分。