§27-1 導數
差商是一個算得出來的量,可是它在 c 這一點本身沒有定義。要怎麼用它定出一個只屬於 c 的數?而這個數一旦存在,會不會反過來要求函數在那裡連續?
變化率怎麼寫成定義
腳踏車從坡頂滑下來,前十秒走了 20 公尺,接下來十秒走了 35 公尺。旁邊的人問:它在第 12 秒有多快?手上能算的卻只有一段一段的平均——量任何速度都得先有兩個時刻相減,可是「某一刻的快慢」只給我們一個時刻。
常見的辦法是把那一段時間縮短:從第 12 秒量到第 13 秒、量到第 12.1 秒、量到第 12.01 秒,看看算出來的平均往哪裡靠。這個做法很自然,可是它不能一路縮到底——時間差一旦真的變成零,距離差也是零,而 0/0 什麼都不是。所以「縮到底」不能照字面執行,得換個說法。
換的說法我們已經很熟:不要求算出 那一刻 的值,只要求有一個數,讓平均在時間差夠小的時候與它相差夠少;而「夠少」由對方指定,「夠小」由我們回答。把腳踏車換成一般的函數 f、把時刻換成定義域裡的一點 c,那個一段一段的平均就是
(f(x) − f(c))/(x − c),
它有一個現成的名字:差商(difference quotient)。差商在 x ≠ c 的每一點都算得出來,在 x = c 那一點沒有定義——下面這張圖先把它的幾何意思擺出來。
這張圖在說差商量的是什麼:藍色那條直線穿過圖形上的兩個點,它的斜率就是差商——高度差除以橫向差。兩個點越靠越近時,藍線會往紅色虛線那個位置轉過去,可是兩點重合的那一瞬間藍線根本畫不出來(兩個點決定不了一條線)。定義要捕捉的正是紅線的斜率,而捕捉的方式不能是「讓兩點重合」。
Call a real number L the derivative of f at c provided that to each ε > 0 there corresponds a δ(ε) > 0 for which every x ∈ D with 0 < |x − c| < δ(ε) satisfies
|(f(x) − f(c))/(x − c) − L| < ε.
The number L is then denoted by f′(c).
f′(c) = limₓ→c (f(x) − f(c))/(x − c)(x ∈ D、x ≠ c)。
兩種寫法字面不同,要檢查的事一模一樣;25.1 全篇假設 c 是 cluster point,也正是 27.1 把這一條寫進前提的原因。
這張圖在說 cluster point 這個前提在防什麼:右邊那一點屬於定義域,可是把圈子畫成半徑 1,圈裡除了它自己一個定義域的點都沒有。於是「代進差商檢查一下」這個動作根本執行不了,條件無事可做地成立,任何數都成了導數。左邊那一段就不會有這個問題——不論圈子縮得多小,圈裡永遠還有別的點。
定義寫好之後,先用兩個算得動的例子把它跑一遍。第一個挑差商化簡得掉的函數,看看整套流程的骨架;第二個挑一個在端點上會出事的函數,看看「問得出來」與「答得出來」是兩回事。
- 令 D = ℝ、f(x) = x²,任取 c ∈ ℝ。ℝ 的每一點都是 ℝ 的 cluster point,27.1 的兩個前提都齊了。
- 先化簡差商。x ≠ c 時分子分母都含 x − c:
(x² − c²)/(x − c) = (x + c)(x − c)/(x − c) = x + c。
差商在 c 以外就是一條直線。 - 猜 L。直線 x + c 在 x = c 的那一格填 2c 最順,於是猜 L = 2c,並算出誤差:
|(x + c) − 2c| = |x − c|。 - 驗證。對方給 ε > 0,我們回答 δ(ε) = ε。因為 0 < |x − c| < δ(ε) 時誤差恰好就是 |x − c|,所以誤差 < ε,條件成立。
- 拿數字對一次:c = 3、ε = 0.01 時 δ = 0.01。取 x = 3.004,差商是 3.004 + 3 = 6.004,與 2c = 6 相差 0.004,確實小於 0.01。
這張圖在說例 1 為什麼一步就過關:畫的不是 x² 的圖形,而是差商本身當成 x 的函數的圖形——它是一條直線,只在 x = c 那一點被挖空。定義要找的 L 就是把那個空洞補起來的高度 2c,而直線上的點離空洞多遠,函數值就離 2c 多遠,這正是 δ(ε) = ε 的來由。
- 令 D = [0, ∞)、f(x) = √x。先看 c > 0。差商的分母含 x − c,把它有理化:
x − c = (√x − √c)(√x + √c),
所以 x ≠ c 時 (√x − √c)/(x − c) = 1/(√x + √c)。 - 猜 L = 1/(2√c)(把 x 換成 c 代進上式),並算誤差。通分之後
|1/(√x + √c) − 1/(2√c)| = |√c − √x| / (2√c(√x + √c)),
再把 |√c − √x| = |x − c|/(√x + √c) 代進去,得
誤差 = |x − c| / (2√c (√x + √c)²)。 - 估分母。因為 x ≥ 0,所以 (√x + √c)² ≥ c,於是 誤差 ≤ |x − c| / (2c√c)。對方給 ε > 0 時回答 δ(ε) = 2c√c · ε 就交差:f′(c) = 1/(2√c)。
- 換到端點。0 ∈ D,而且 0 的每個 neighborhood 都含 D 裡的正數,所以 0 是 D 的 cluster point,27.1 問得出來。此時差商是 (√x − 0)/(x − 0) = 1/√x——只能從右邊靠近,因為 D 在左邊沒有點。
- 證明沒有 L 合格。取 ε = 1,並隨便給一個 δ > 0 與一個候選的 L。由 §6-3 的 6.6 Archimedean 性質(ℕ 在 ℝ 中沒有上界),取得到自然數 n 同時大於 |L| + 1 與 1/√δ。
- 令 x = 1/n²。由於 n > 1/√δ,所以 x < δ;又 x > 0,於是 x ∈ D 且 0 < |x − 0| < δ,這個見證點確實合法。它的差商是 1/√x = n,而 §5-4 的 5.12 三角不等式給出 |n − L| ≥ n − |L| > 1 = ε。條件垮掉。
這張圖在說例 2 的兩半為什麼結果相反:在 c > 0 的地方(藍點),曲線的傾斜程度是有限的,割線靠過去時斜率穩定地收到 1/(2√c)。可是從原點拉出去的那條紅色割線,取的點越靠近原點就越陡,斜率一路衝過任何事先寫下的數——所以那裡沒有任何一個實數當得成導數。
兩個例子都算出了導數(或確認算不出),可是還沒問一個更基本的問題:一個點上有導數,這件事對函數本身有什麼要求?下面這條引理給出答案,而且答案是單向的。
手上是 27.1 給的一句「對每個 ε 都有一個 δ」,要的是 20.1 給連續的同一種句子。兩句話的量詞形狀一樣,差別在被估計的東西:定義管的是差商的誤差,結論要的是函數值的誤差。
證明計畫 · 由所求想起
所求是讓 |f(x) − f(c)| 小,而它等於差商乘上 |x − c|。乘積的兩個因子分工:一個要有界,一個要能任意小。
第一步:把定義用在一個固定的誤差上(取 1),換來差商的一個與結論無關的上界。
第二步:用三角不等式把「差商離 f′(c) 不到 1」翻成「差商的絕對值有上界」。
第三步:兩邊乘上 |x − c|,再把 |x − c| 取得夠小,把乘積壓到對方要求的誤差以下。
|(f(x) − f(c))/(x − c) − f′(c)| < 1
for every x ∈ D with 0 < |x − c| < δ.
|(f(x) − f(c))/(x − c)| < |f′(c)| + 1.
Multiplying by |x − c| gives |f(x) − f(c)| ≤ |x − c| (|f′(c)| + 1).
這張圖在說證明第二步造出來的那個估計長什麼樣:|f(x) − f(c)| ≤ |x − c| (|f′(c)| + 1) 的幾何意思,就是圖形被關在以 (c, f(c)) 為頂點、斜率為 ±(|f′(c)| + 1) 的兩條紅線之間。兩條線在頂點處收成一個點,所以只要橫向靠得夠近,縱向的差距自動被夾到任何指定的範圍內——這就是連續。
- 令 D = ℝ、f(x) = |x|、c = 0。因為 f(0) = 0,差商是 |x|/x。
- 算出它的兩種值。x > 0 時 |x| = x,差商是 1;x < 0 時 |x| = −x,差商是 −1。差商只有這兩個值,而且兩個值在 0 的任何一側都各自出現無限多次。
- 取 ε = 1,假設某個 L 合格。那麼存在 δ > 0,使 0 < |x| < δ 的每個 x 都滿足「差商與 L 相差小於 1」。取 x = δ/2 得 |1 − L| < 1,取 x = −δ/2 得 |−1 − L| < 1。兩個見證點都落在 D = ℝ 裡,取法合法。
- 兩式相加即出矛盾。由 §5-4 的 5.12 三角不等式,
2 = |(1 − L) + (L + 1)| ≤ |1 − L| + |L + 1| < 2。
因為 2 < 2 不可能,所以沒有任何 L 合格,f′(0) 不存在。 - 另一方面它在 0 連續。恆等函數 x ↦ x 處處連續(對方給 ε,回答 δ = ε 即可),而 §20-5 的 20.7 說取絕對值保連續,於是 |x| 也處處連續。
- 0 以外沒事:c > 0 時 c 附近的差商恆為 1,c < 0 時恆為 −1,所以 f′(c) 分別是 1 與 −1。壞掉的只有原點這一點。
這張圖在說例 3 的矛盾從哪裡來:畫的是差商本身,它只取 1 與 −1 兩個值,中間沒有過渡。不論把灰色虛線之間那條帶子縮得多窄,帶子裡兩種值都在,於是任何候選的 L 都得同時離 1 與 −1 不到 1——這兩件事湊不到一起。對照例 1 的圖:那裡只挖掉一點,這裡是整條斷開。
- 壞點可以有很多個。把例 3 的函數平移再相加,例如 f(x) = |x| + |x − 1| + |x − 2|,它處處連續,而在 0、1、2 這三點各壞一次,其餘每一點都有導數。想要幾個壞點就放幾個。
- 把壞點排成一列(例如所有的 1/n),配上一列越來越小的係數,同樣的手法也做得出來——壞點可以是可數無限多個。
- 這樣造出來的函數,壞點仍然是少數:把它們挑掉之後,剩下的每一點都有導數。到這裡為止,連續與可微的差距看起來像是「幾個孤立的破洞」。
- 1872 年 Weierstrass 給出的例子把這個印象推翻了:一個在每一點都連續、而在每一點都沒有導數的函數。它的圖形無法照著畫——不論放大到什麼倍率,看到的都還是抖動的折線。
- 造法是把一列連續函數疊起來,而且兩個要求互相拉扯:後面的函數振幅一次比一次小,疊出來的東西才連續得起來;它的轉折卻一次比一次密,才能讓每一點附近永遠有更陡的鋸齒把差商甩開。寫成式子是一個無窮級數,要等級數的工具備齊才交代得完整,這裡先記一筆。
這張圖在說例 4 的函數為什麼每一點都沒有導數:導數存在的意思是割線的斜率靠得攏,也就是圖形在夠小的尺度下看起來夠像一條直線。而這個函數不論放大幾次都還是折線——紅框裡那一小段放大之後,抖動的密度與陡度都沒有變少,於是每一點附近都找得到讓差商跳開的 x。(這是示意圖,真正的構造要等級數的工具。)
本篇把「某一刻變多快」寫成了可以逐項驗證的定義(27.1):差商在 c 這一點沒有定義,可是它在 c 附近的值可以被一個實數逼近,那個實數就是導數;c 得是 cluster point,否則條件空著成立,導數不唯一。27.2 說有導數的點必定連續,而例 3 與例 4 說反過來不成立,還差得很遠。下一篇 §27-2 要問的是:導數是一個點上的數,它管不管得到那一點附近的值?先站起來走幾步、把肩膀伸展開再回來。
順帶一提:絕對值函數去應徵「可微」這個職位,面試官問它在 0 的導數是多少,它說「看你從哪一邊走過來」——結果沒錄取。