這張圖在說為什麼變化率不能逐項相乘:把兩個量看成長方形的兩邊,面積的增量分成三塊——上方那條是 f 的變動乘上整個 g,右方那條是 g 的變動乘上整個 f,右上角那一小塊才是兩個變動相乘。「兩個變化率相乘」算的只有那個小角落,而兩邊的變動越小,小角落相對於兩條長帶子就越不重要。
先把場地講定。以下 f 與 g 都定義在同一個 D ⊆ ℝ 上,c ∈ D 而且是 D 的 cluster point(§10-2 的 10.3:c 的每個 neighborhood 裡都還有 D 中異於 c 的點)——這正是 27.1 問得出導數所需的兩個前提。f + g、f − g、fg 的定義域跟著也是 D;f/g 就不同了,它只在 g 不為零的點上有值,定義域要另外算。兩個函數本來的定義域不一樣時,先把它們都限制到交集上再談,可是那時得重新確認 c 仍是交集的 cluster point,否則 27.1 連問都問不出來。
THEOREM · ALGEBRA OF DERIVATIVES
Let f and g both have derivatives at c. Then f + g, f − g and fg have derivatives at c, and (f ± g)′(c) = f′(c) ± g′(c) together with (fg)′(c) = f′(c)g(c) + f(c)g′(c). If in addition g(c) ≠ 0, then f/g is defined near c, has a derivative at c, and (f/g)′(c) = [f′(c)g(c) − f(c)g′(c)]/g(c)².
四條規則的形狀值得分開看。和與差是逐項的:兩個變化率直接相加或相減,一點修正都不必。乘積不是——(fg)′(c) 不等於 f′(c)g′(c),而是兩截相加,每一截讓其中一個函數變動、另一個維持它在 c 的整個大小,正是長方形那兩條長帶子。商那一條多寫了一個前提 g(c) ≠ 0,而它買到的不只是「這一點的分母不為零」:由 §27-1 的 27.2(有導數的點必定連續),g 在 c 連續,於是 g 在 c 的一整個 neighborhood 內都不為零,f/g 在 c 附近才真的有值可寫;還要確認 c 仍是 f/g 定義域的 cluster point,27.1 才套得上去。這兩件事都不是額外假設,是 g(c) ≠ 0 加上連續一起算出來的。§20-5 的 20.6(連續在和、差、積、商之下保得住)對商也掛著同一個條件,理由一模一樣。
三條結論共用同一個工具:27.1 說「某個實數是導數」的意思,是新函數的差商在 c 附近與那個數相差夠少。所以每一條都是先寫出新函數的差商,再把它與兩個已知的差商接起來。和與差接得很直接;乘積接不起來——fg 的差商既不是兩個差商的和也不是它們的積,這一步得動一次手腳。
證明計畫 · 由所求想起 所求:三個新函數各自的差商,在 c 附近與一個指定的數相差夠少。 第一步(和與差):新差商正好是兩個舊差商相加或相減,於是把對方給的誤差分成兩半,兩邊各交一半。 第二步(乘積):分子上兩個因子同時換了值,先加一項再減同一項,拆成兩截,每一截只剩一個因子在動。 第三步:兩截各含一個舊差商,旁邊乘著的因子得收得住——其中一截乘的是 g 在動點上的值,靠 27.2 的可微必連續把它壓回 g(c) 附近。 第四步:三筆誤差各分到三分之一,加起來交差。
Proof. Throughout, t ∈ D and t ≠ c. Since ((f ± g)(t) − (f ± g)(c))/(t − c) = (f(t) − f(c))/(t − c) ± (g(t) − g(c))/(t − c), let ε > 0 be given and let δ be the smaller of the two numbers that 27.1 supplies for f and for g at the error ε/2. Because |A ± B| ≤ |A| + |B| by 5.12, every such t with |t − c| < δ makes the displayed quotient differ from f′(c) ± g′(c) by less than ε. Hence (f ± g)′(c) = f′(c) ± g′(c).
For the product, add and subtract f(c)g(t) in the numerator: f(t)g(t) − f(c)g(c) = (f(t) − f(c))g(t) + f(c)(g(t) − g(c)). Dividing by t − c gives (f(t)g(t) − f(c)g(c))/(t − c) = ((f(t) − f(c))/(t − c))·g(t) + f(c)·((g(t) − g(c))/(t − c)).
這一步的所求:把乘積的差商,換成兩個已經知道極限的舊差商。直接看 f(t)g(t) − f(c)g(c) 拆不開,因為兩個因子同時換了值,沒有一個公因式可以提。補上 f(c)g(t) 再減掉同一個 f(c)g(t),總值一分不差,卻讓每一截只剩一個因子在動:前一截是 f 的變動乘上 g 在動點的值,後一截是 f 在 c 的值乘上 g 的變動。這正是開頭那筆帳的算法——多漲的單價乘上當時的份數,加上當時的單價乘上多賣的份數,而那個小角落已經被吸收進前一截裡(前一截乘的是 g(t) 而不是 g(c))。
Since g′(c) exists, 27.2 makes g continuous at c. Applying continuity with the error 1 yields δ₁ > 0 such that every t ∈ D with |t − c| < δ₁ satisfies |g(t) − g(c)| < 1, so that |g(t)| < |g(c)| + 1 by 5.12.
這一步的所求:一個與待證誤差無關的固定上界,免得 g(t) 這個因子在極限過程中失控。g 的連續是白拿的——27.2 說有導數的點必定連續,而 g 在 c 有導數是定理的前提,所以不必另外檢查。誤差挑成常數 1 而不是待證的 ε,是為了讓上界固定下來:這個上界等一下要乘上另一個估計,若它自己跟著 ε 一起縮,估計就會繞回原地。三角不等式再把「離 g(c) 不到 1」翻成「絕對值不超過 |g(c)| + 1」。
For t ∈ D with 0 < |t − c| < δ₁, the product quotient differs from f′(c)g(c) + f(c)g′(c) by ((f(t) − f(c))/(t − c) − f′(c))·g(t) + f′(c)·(g(t) − g(c)) + f(c)·((g(t) − g(c))/(t − c) − g′(c)).
這一步的所求:把「差商與目標的差」改寫成三筆各自壓得小的量。做法是逐項對齊。前一個 pline 已經把差商寫成「f 的差商乘 g(t)」加上「f(c) 乘 g 的差商」;現在把第一截裡的 f 的差商換成「它與 f′(c) 的差」,多扣掉的 f′(c)g(t) 補回來,而目標裡本來就有一個 f′(c)g(c),兩者相減剛好留下第二筆 f′(c)(g(t) − g(c));第二截同樣換成「它與 g′(c) 的差」,補回來的 f(c)g′(c) 與目標裡的那一項對消。展開之後每一項都對得上,這是例行核對。三筆的分工很清楚:第一筆與第三筆各裝一個差商的誤差,第二筆裝的是 g 的值靠近 g(c) 的程度。
Let ε > 0 be given. By 27.1 applied to f and to g, and by the continuity of g at c, choose δ ≤ δ₁ so small that these t satisfy |(f(t) − f(c))/(t − c) − f′(c)| < ε/(3(|g(c)| + 1)), |g(t) − g(c)| < ε/(3(|f′(c)| + 1)), |(g(t) − g(c))/(t − c) − g′(c)| < ε/(3(|f(c)| + 1)). Since |g(t)| < |g(c)| + 1, the three terms are then each at most ε/3 and their sum is less than ε. Therefore (fg)′(c) = f′(c)g(c) + f(c)g′(c).
商法則比前三條多一道手續:除法要有意義。有兩件事得先交代——分母在 c 附近都不為零,否則 f/g 在 c 附近寫不出值;以及 c 仍是 f/g 定義域的 cluster point,否則 27.1 的第二個前提落空,導數問出來也不唯一(§27-1 的 27.1 的反例正是這一格)。兩件都不是額外假設:它們由 g(c) ≠ 0 加上 27.2 給的連續一起算得出來,所以證明的前兩步就是把它們算出來。
證明計畫 · 由所求想起 所求:f/g 的差商與 [f′(c)g(c) − f(c)g′(c)]/g(c)² 相差夠少——可是在寫下這個差商之前,得先確定它每一格都寫得出來。 第一步:用 27.2 的連續把 g 的值鎖在離 g(c) 不到一半的範圍內,分母於是不為零。 第二步:確認 c 仍是新定義域的 cluster point,27.1 才問得出導數。 第三步:先只處理倒數這一格,把 1/g 的差商換成 g 自己的差商乘上一個因子。 第四步:把 f/g 看成 f 與 1/g 的乘積,用剛證好的乘積律收尾。
Proof. Since g′(c) exists, 27.2 makes g continuous at c. Because g(c) ≠ 0, applying continuity with the error |g(c)|/2 > 0 yields δ₀ > 0 such that every t ∈ D with |t − c| < δ₀ satisfies |g(t) − g(c)| < |g(c)|/2. Since |g(c)| − |g(t)| ≤ |g(t) − g(c)| by 5.12, these t satisfy |g(t)| > |g(c)|/2 > 0.
這張圖在證分母為什麼不會是零:藍色帶子的中線高度是 g(c),上下各留 |g(c)|/2。連續保證只要 t 離 c 不到 δ₀,曲線就走在帶子裡;而帶子的下緣仍在橫軸上方 |g(c)|/2 處,所以這一段上的每個 g(t) 都離零有距離。誤差若挑成整個 |g(c)|,帶子的下緣會壓到橫軸上,這個結論就沒了。
Let D₁ = {t ∈ D : g(t) ≠ 0}, the set on which f/g has a value. It contains c, and it contains every t ∈ D with |t − c| < δ₀. Given any neighborhood of c, shrink it to radius less than δ₀; since c is a cluster point of D, the shrunken neighborhood still meets D in a point other than c, and such a point lies in D₁. Therefore c is a cluster point of D₁, so 27.1 applies to functions defined on D₁.
這一步的所求:確認 27.1 的兩個前提在新的定義域上都還在。f/g 住的地方是 D₁,不是 D——分母為零的點必須挑掉。c 屬於 D₁ 這一半很直接(g(c) ≠ 0 是前提);會出事的是 cluster point 那一半:D₁ 比 D 小,「c 附近還有點可以代進差商」這件事不會自動跟著繼承。能繼承是因為第一步已經把 c 的一整段鄰域內的 D 的點全都留在 D₁ 裡了:半徑縮到 δ₀ 以內之後,10.3 交出來的那個異於 c 的點必定滿足 g ≠ 0。而半徑縮小之後仍然是 neighborhood,這由 §9-3 的 9.7(neighborhood 就是藏得住一個含該點的 open set 的集合)保證。少了這一格,27.1 根本套不上去。
這張圖在證第二步:紅點是 c,藍點是離它不到 δ₀ 的定義域點。第一步已經保證這些點上 g 都不為零,所以把定義域縮成 D₁ 時,它們一個也沒被挑掉——要多靠近 c 就有多靠近的那些點還在,c 於是仍然是 D₁ 的 cluster point。灰點在窗口外,被不被挑掉都不影響這個結論。
For t ∈ D₁ with t ≠ c, combining the two fractions gives (1/g(t) − 1/g(c))/(t − c) = −((g(t) − g(c))/(t − c))·(1/(g(t)g(c))).
這一步的所求:把倒數的差商,換成 g 自己的差商——因為只有後者有現成的極限可用。通分是唯一的動作:1/g(t) − 1/g(c) 等於 (g(c) − g(t))/(g(t)g(c)),分子與 g(t) − g(c) 只差一個負號,再除以 t − c 就得到上面的式子。這個式子每一格都寫得出來,靠的是第一步:|g(t)| > |g(c)|/2 > 0,所以 g(t)g(c) 不為零。
Subtracting the value −g′(c)/g(c)² and splitting the result gives (1/g(t) − 1/g(c))/(t − c) + g′(c)/g(c)² = −((g(t) − g(c))/(t − c) − g′(c))·(1/(g(t)g(c))) + g′(c)·(g(t) − g(c))/(g(t)g(c)²).
Let ε > 0 be given and choose δ ≤ δ₀ so small that these t satisfy |(g(t) − g(c))/(t − c) − g′(c)| < ε g(c)²/4, |g(t) − g(c)| < ε |g(c)|³/(4(|g′(c)| + 1)). The two terms are then each at most ε/2, so their sum is less than ε. Hence 1/g has a derivative at c and (1/g)′(c) = −g′(c)/g(c)².
Finally f/g = f·(1/g) on D₁. Restricting f to D₁ leaves its derivative at c unchanged, because the inequality in 27.1 persists on a smaller domain and c is a cluster point of D₁. The product rule proved above therefore gives (f/g)′(c) = f′(c)(1/g(c)) + f(c)(−g′(c)/g(c)²) = [f′(c)g(c) − f(c)g′(c)]/g(c)².
這一步的所求:把倒數這一格接回原來的問題。把 f 限制到 D₁ 上這件事要說一句,不能默默做:27.1 檢查的是「定義域裡離 c 夠近的點」,定義域縮小只是少檢查幾個點,原來的不等式在剩下的點上照樣成立——真正可能垮掉的是 cluster point 那一條,而第二步已經把它守住了。乘積律要求兩個函數在 c 都可微且住在同一個定義域上,現在 f 與 1/g 都住在 D₁ 上,前提齊了。最後的等號只是通分:f′(c)/g(c) 乘上 g(c)/g(c) 之後與 f(c)g′(c)/g(c)² 併成同一個分母。
分母在該點不為零的地方,商就可微,導數是那個熟悉的式子;而「f/g 在 c 附近有定義」不是憑空假設,是前兩步算出來的。∎
例 1用乘積律遞推出 xⁿ 的導數
從定義算一個 x² 就走了五個步驟。要對每個 n 都算出 xⁿ 的導數,難道得算無限多次?
令 D = ℝ,對 n ∈ ℕ 記 pₙ(x) = xⁿ。要證的是:對每個 c ∈ ℝ 都有 pₙ′(c) = n·cⁿ⁻¹。先約定 c⁰ = 1(c = 0 時也是 1),這樣 n = 1 的式子在原點也讀得通。
起點 n = 1。p₁(x) = x,x ≠ c 時差商是 (x − c)/(x − c) = 1,恆等於 1,於是不管對方給多小的 ε,回答任何 δ 都過關:p₁′(c) = 1 = 1·c⁰。