兩個本不該相遇的世界
到目前為止,你已經見過兩台非常不同的機器。導數接收一個函數,告訴你它的瞬時斜率——它此刻變化得有多快。定積分接收一個函數,把它下方的面積加起來,這面積是越來越細的矩形所構成的黎曼和的極限。一個講的是陡峭,另一個講的是累積。沒有任何明顯的理由說這兩者之間該有什麼關係。
然而微積分基本定理卻宣告:它們是同一枚硬幣的兩面——微分與積分互為逆運算,就像加法抵消減法、平方抵消開方一樣。正是這條結論把整門學科繫在了一起,而它確實令人驚嘆——牛頓和萊布尼茨在它之上建起了現代科學。
第一部分:累積函數和它的斜率
從一個函數 f 出發,定義一個全新的函數 A,讓它一邊走一邊累積面積:A(x) = integral from a to x of f(t) dt。把它讀作「從固定的左端 a 到會移動的右端 x,f 下方已經堆積了多少面積」。當你把 x 往右推時,A 在增長。問題是:A 增長得有多快?
直覺是這樣的。把 x 再往右輕輕挪一點點,挪一個寬度 h。你掃進來的那塊多出來的面積,是一條幾乎正好是矩形的細條:高為 f(x)、寬為 h,所以大約是 f(x)*h。這意味著 A 的變化量除以 x 的變化量大約是 f(x)*h / h = f(x)。取 h -> 0 的極限,這個近似就變成了精確等式。於是 A 的變化率——也就是它的導數——恰好就是 f 本身。
d ( integral from a to x of f(t) dt ) = f(x)
dx
differentiating an area-so-far function gives back the original function第二部分:終結苦工的捷徑
第一部分是那條深刻的真理;第二部分是每天都用的工具。它說:要算一個從 a 到 b 的定積分,你不必去硬啃黎曼和的極限。換個做法:找到 f 的任意一個原函數 F(任何滿足 F'(x) = f(x) 的函數),然後只要把它在兩端的取值相減就行:integral from a to b of f(x) dx = F(b) - F(a)。
停下來想想這有多奇怪。左邊是一個無窮的、精細的求和過程;右邊是兩個數相減。定理保證它們相等——每一次都相等。為什麼可以用「任意一個」原函數?因為同一個 f 的兩個原函數之間只相差一個常數,而這個常數在相減 F(b) - F(a) 時被抵消掉了。所以你儘可以挑最簡單的那一個。
integral from a to b of f(x) dx = F(b) - F(a), where F'(x) = f(x) shorthand: integral from a to b of f(x) dx = [ F(x) ] from a to b
一個你能信得過的算例
我們來求 f(x) = x^2 從 x = 0 到 x = 3 之間下方的面積——這正是那種用加矩形的辦法做起來會很折磨人、但用第二部分一行就搞定的題目。
- 找 f(x) = x^2 的一個原函數。因為 x^3 的導數是 3x^2,所以函數 F(x) = x^3 / 3 滿足 F'(x) = x^2。很好——這就是我們要的 F。
- 在上端求 F 的值:F(3) = 3^3 / 3 = 27 / 3 = 9。
- 在下端求 F 的值:F(0) = 0^3 / 3 = 0。
- 相減:integral from 0 to 3 of x^2 dx = F(3) - F(0) = 9 - 0 = 9。完成——根本不需要無窮求和。
# sanity check: a crude Riemann sum should creep toward 9
def riemann(f, a, b, n):
dx = (b - a) / n
return sum(f(a + (i + 0.5) * dx) * dx for i in range(n))
f = lambda x: x**2
print(riemann(f, 0, 3, 1000)) # ~ 8.99999..., closing in on the exact 9