JOVANA
Library Glossary Getting Started Three Levels Fields How it works Mission
Join the mission
All guides

定積分:把無窮多片加起來

當沒有一個整齊的矩形可以指著說「就是它」,你要怎麼量出一條**曲線**下方的面積?這個竅門比微積分還古老:把區域切成一條條細長條,假裝每條都是矩形,然後相加。這些長條永遠拼不嚴絲合縫——於是你把它們做得更細、再更細,去追逐總和所**趨向**的東西。這場追逐有一個歸宿,是一個單一的數字,這個數字就是**[[definite-integral|定積分]]**。這篇導讀從零把它搭起來,並說明為什麼它遠不止是「面積」而已。

古老的難題:曲線下方的面積

矩形的面積你閉著眼都能算:寬乘以高。三角形、圓、梯形——幾何為每一種都遞給你一個公式。可現在畫一條起伏的曲線,比如 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 個矩形,每個寬為 dx、高為 f(x_i)。這個和是 f 從 a 到 b 下方面積的一個估計——還不是答案,只是一塊踏腳石。

在每條長條裡,你該讀哪裡的高度?你有得選,而這個選擇給這個和起了名字。讀每條邊緣的高度,你得到左黎曼和;讀邊緣,是右黎曼和;讀正中間,是中點和,通常它貼真值貼得最緊。對一條光滑曲線,當 n 很小時這些彼此略有出入——可隨著長條變細,它們的分歧朝著「無」收縮。

  1. 決定你要多少條長條 n,並算出寬度 dx = (b - a) / n。
  2. 在每條長條裡,選一個取樣點(左、右或中間),量出那裡的高度 f(x_i)。
  3. 把每個矩形的面積取作 f(x_i) * dx,再把這 n 個全部累加成一個總和。
  4. 現在增大 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.
定積分是黎曼和的極限。這個符號來自代表「求和」的長長的 S;dx 就是 dx = (b - a)/n 在長條消逝時所變成的東西。

而結果是一個單一的數字,不是一個函數。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
隨著 n 增大、dx 縮小,左黎曼和朝著 1/3 = 0.3333… 攀升。在任何有限的 n 上它都不會正好落定,但它所趨向的那個極限,就是定積分。

盯著那一列數字一點點爬向 0.3333…,就是整個概念的縮影。我們從來沒有真的加完無窮多片——沒有哪台計算機能辦到——但我們也不需要。我們只需要看出*這些總和在奔向哪裡*,而一個光滑的函數對此毫不含糊。那個歸宿,就是定積分。