斜率,你早已擁有的那個想法
想像一條筆直的路爬上山坡。你每往前走10米,就升高2米。這個比值——縱向變化除以橫向變化,這裡是2/10——就是斜率:一個數字,說明這條線有多陡。路越陡,數字越大;平路,斜率為零;下坡,斜率為負。早在有人說出*微積分*這個詞之前,你就在代數裡見過它,而它正是整門學科賴以生長的種子。
同樣的算術能描述任何一種變化,不只是山坡。如果一個[[function-calculus|函數]] f 告訴你某個量在每個輸入處的值——帳戶裡的錢隨月份變化、走過的距離隨秒數變化——那麼它兩點之間的斜率,就是[[rate-of-change|平均變化率]]:輸出移動了多少,除以輸入移動了多少。對一條直線,這個數字處處不變。對一條曲線,它就變了,而正是這一個事實,讓故事開始變得有趣。
把平均變化率寫下來
取一個函數 f 和兩個輸入 a 與 b。a 處的點位於高度 f(a),b 處的點位於高度 f(b)。把這兩點連成一條直線——它穿切過曲線,所以叫作割線(取自拉丁文的*切割*之意)。它的斜率就是 f 從 a 到 b 的[[rate-of-change|平均變化率]],公式不過又是縱向除以橫向:
average rate of change = ( f(b) - f(a) ) / ( b - a )
Example: f(x) = x^2, from a = 1 to b = 3
f(3) - f(1) 9 - 1 8
------------- = ------- = --- = 4
3 - 1 3 - 1 2所有例子裡最熟悉的,是運動。如果 f(t) 是一輛車到時刻 t 為止走過的距離,那麼 ( f(b) - f(a) ) / ( b - a ) 就是總距離除以總時間——也就是樸素的平均速度。兩小時開了120公里,你的平均速度就是每小時60公里,無論這趟旅程實際上是怎麼開的。
平均答不上來的那個問題
現在瞥一眼你的車速表。它顯示的不是*整趟旅程*的60公里每小時——它顯示的是你此時此刻開得有多快,而且你一碰油門它就變。這是一個全然不同的量:不是兩小時裡平均出來的速度,而是某一個時間點上的速度,那一刻根本沒有時間流逝。這正是微積分為之而生的問題——而請注意,我們的公式在它面前噎住了。
試著把 b 設得等於 a,去算單一瞬間的速度。橫向 b - a 變成了0,縱向 f(b) - f(a) 也變成了0。公式塌縮成 0/0——毫無意義。單一瞬間只是一個點,而你沒法只穿過一個點畫出割線;要有斜率,你至少需要兩個點。所以與其去要求那不可能之事,我們改用一招更聰明的:讓 b 離 a *稍微*有點距離,然後把它越挪越近,盯著割線的斜率會怎麼變。
- 鎖定你關心的那一瞬間——比如曲線 f(x) = x^2 上的 a = 1。
- 選一個離它一小步的第二點 b,算出割線斜率 ( f(b) - f(1) ) / ( b - 1 )。
- 把 b 挪得更靠近1——試 1.1,再試 1.01,再試 1.001——每次都重新算一遍。
- 看這些斜率是否朝著某一個數字歸攏。如果是,這個數字就是瞬時變化率。
看著割線斜率安頓下來
我們就真的為 f(x) = x^2 在 a = 1 處做一遍這個實驗。我們絕不把 b 設得正好等於1——那會給出 0/0——而是讓它一點點逼近,把每一次的割線斜率記下來。幾行算術就讓這個規律藏不住了。
def f(x):
return x * x
a = 1.0
for b in [2.0, 1.5, 1.1, 1.01, 1.001, 1.0001]:
secant_slope = (f(b) - f(a)) / (b - a)
print(b, secant_slope)
# b secant slope
# 2.0 3.0
# 1.5 2.5
# 1.1 2.1
# 1.01 2.01
# 1.001 2.001
# 1.0001 2.0001看看剛才發生了什麼。我們從來無法直接代入 b = 1,可這些斜率對自己要去往哪裡毫不含糊:2。那個目標值——當兩點擠到一起時割線斜率所趨向的數字——就是我們很快要稱之為[[limit|極限]]的東西。它們安頓下來的那個斜率,就是恰好在那一個點上輕擦過曲線的[[tangent-line|切線]]的斜率,而它*就是*瞬時變化率。把這套構造推到它的極限,整件事就成了[[derivative-calculus|導數]]——下一條學習線的引擎。