3.1 費馬的極值法與切線問題(1629 年)#
學習動機#
第 1 章講的是「怎麼把極限說清楚」,第 2 章講的是「怎麼把極限定理寫成不等式」。但在我們能說清楚「導數是什麼」之前,數學家早就在用導數了——而且用得很好。
1629 年,費馬(Pierre de Fermat, 1607–1665)在圖盧茲(Halle-sur-Saône)完成了一篇手稿,標題是《切線與極值》(Tangentui Lineae Curvarum)與《求極值的方法》(Methodus de Extrema)。這篇手稿在他生前沒有出版,卻在 1679 年由他的兄弟 Samuel de Fermat 編入《數學文集》(Varia Opera Mathematica)才問世。它裡面藏著兩樣東西:
- 切線問題的一般解法——給定一條由方程描述的曲線與曲線上一點,求該點的切線;
- 極值原理——一條光滑曲線在「最高點」或「最低點」處,切線必定平行於 \(x\) 軸。
第二點是今天「 \(\frac{\mathrm{d}y}{\mathrm{d}x} = 0\) 是極值點的必要條件」的直接祖先。而第一點,正是「導數」這個概念的真正動機:費馬並不是先定義導數、再去求切線;他是先有切線問題,再用極值法把它解決。
本節要回答四個問題:
- 切線問題怎麼從阿波羅尼奧斯(Apollonius)與阿基米德(Archimedes)傳到費馬手上?
- 費馬的「尋常法」(méthode ordinaire)與「適當法」(méthode appropriée)差在哪裡?
- 為什麼「極值點處切線必為水平」是一個自然的想法,而不是一個需要證明的定理?
- 費馬的極值法如何一步步長成 Rolle 定理(1657)?
而最後——我們要用 SymPy 把費馬的「適當法」完整跑一遍:把切線代回曲線方程,要求交點是二重根。這是隱函數微分的原始形式,比萊布尼茲的 \(\frac{\mathrm{d}y}{\mathrm{d}x}\) 早了 55 年。
3.1.1 阿波羅尼奧斯與阿基米德:切線問題的古老血統#
希臘人幾乎沒有留下「切線」的正式定義,但切線的問題一直在他們手邊。
阿波羅尼奧斯(Apollonius of Perga, 前 240–190 年)在《圓錐曲線論》(Conics)中系統研究拋物線、橢圓、雙曲線。他的切割(tomos)定義了「切線」:與拋物線只交於一點、且與該曲線「不交叉」的直線。阿波羅尼奧斯用對稱軸上的比例關係給出了拋物線切線的構造方法。
我們用現代符號寫出來。取拋物線
設切點 \(P = (x_0, y_0)\) ,其中 \(y_0^2 = 4a x_0\) 。阿波羅尼奧斯的結論是:過 \(P\) 的切線為
注意右邊的 \(x + x_0\) 是加號——這正是拋物線切線與橢圓切線( \(y_0 y - b^2 x = a^2 x_0\) )形式不同的原因,也是阿波羅尼奧斯「切割」幾何留下的指紋。
阿基米德(Archimedes, 前 287–212 年)則從另一頭推動:他的《方法論》(Methodus, 公元前 200 年左右)是用機械比喻來求面積與體積的方法——他用槓桿、天平、拋物線的「重心」去猜測答案,再用窮竭法證實。費馬的極值法與阿基米德的方法論有一個共同特徵:都是用「機械的、可視的、直覺性的」裝置去解決原本被認為只能靠演繹的問題。
到了 17 世紀,歐洲的解析幾何(笛卡兒 1637、費馬 1639)給了曲線一個方程。問題於是變得尖銳了:
給定方程 \(F(x, y) = 0\) 與曲線上的一點 \(P\) ,求過 \(P\) 的切線方程。
這正是費馬 1629 年手稿要回答的問題。
3.1.2 費馬 1629:尋常法與適當法#
費馬的手稿分兩部分。後半部分(extremum)用極值法處理奇次冪曲線 \(y = x^n\) ;前半部分(tangent)處理切線,並且明確區分了兩種方法。
尋常法(méthode ordinaire)#
「尋常法」處理的是形如
這類單項式曲線。費馬的做法是:把 \(x\) 增加一個「極小增量」 \(e\) ,觀察縱標的增量
然後要求:當 \(e \to 0\) 時,增量與 \(e\) 的比值趨於某個有限值,這個值就是切線斜率。費馬用二項式定理做這個計算,得到的規則是
我們用 SymPy 從極限定義重建費馬的計算。注意 sp.limit 做的事情,就是「令 \(e \to 0\) ,看增量比值趨向何值」。
import sympy as sp
x, h = sp.symbols('x h', real=True)
p, q = sp.symbols('p q', positive=True)
x0 = sp.symbols('x0', positive=True)
# 費馬的「尋常法」:對 y = x^(p/q),求增量比值 lim (y(x+h) - y(x))/h
y = x**(p/q)
slope = sp.simplify(sp.limit((y.subs(x, x + h) - y) / h, h, 0))
print("d/dx x^(p/q) =", slope)
m0 = sp.simplify(slope.subs(x, x0))
print("在 x0 處的斜率 =", m0)
# 費馬的切線寫法:y - y0 = m0 (x - x0),其中 y0 = x0^(p/q)
y0 = x0**(p/q)
tangent = sp.simplify(y0 + m0*(x - x0))
print("切線(化簡後)= ", tangent)
print("斜率再取一次確認 =", sp.simplify(sp.diff(tangent, x).subs(x, x0) - m0))
預期輸出:
d/dx x^(p/q) = p*x**((p - q)/q)/q
在 x0 處的斜率 = p*x0**((p - q)/q)/q
切線(化簡後)= x0**(p/q - 1)*(p*x - p*x0 + q*x0)/q
斜率再取一次確認 = 0
這就是費馬「尋常法」的完整內容:他只對單項式曲線有把握,因為二項式展開給了他一個可操作的代數程序。對一般曲線,二項式定理無從套用——這就逼出了「適當法」。
適當法(méthode appropriée)#
「適當法」處理一般的曲線方程。費馬的想法是這樣的:
切線與曲線在切點處相切,所以直線代回曲線方程後,切點必須是方程的二重根(至少是二重根)。
這個想法的關鍵不在「微分」,而在「根的重數」。費馬把切線寫成 \(y = mx + c\) ( \(m\) 是待求斜率),代入曲線方程 \(F(x, y) = 0\) ,得到一個關於 \(x\) 的多項式;切線的條件是 \(x = x_0\) 這個根是重的。他用「把方程除以 \((x - x_0)\) 後再令 \(x = x_0\) 」來實現這個條件——這正是今天重根定理(若 \(p(x_0) = 0\) 且 \(p'(x_0) = 0\) ,則 \(x_0\) 是至少二重根)的原始版本。
我們用 SymPy 把費馬的「適當法」完整跑一遍。以拋物線 \(y^2 = x\) 為例:
import sympy as sp
x, y, m = sp.symbols('x y m', real=True)
x0, y0 = sp.symbols('x0 y0', real=True)
# 曲線: y^2 = x
F = y**2 - x
# 過 P = (x0, y0)、斜率為 m 的直線
line = y0 + m*(x - x0)
# 把直線代回曲線方程
poly = sp.expand(F.subs(y, line))
print("直線代回曲線後 =", sp.factor(poly))
# 切線條件:x = x0 是二重根 => 對 x 求導後在 x0 處為 0
cond = sp.simplify(sp.diff(poly, x).subs(x, x0))
print("重根條件 =", sp.factor(cond))
sol = sp.solve(cond, m)
print("解得斜率 m =", sol)
預期輸出:
直線代回曲線後 = m**2*x**2 - 2*m**2*x*x0 + m**2*x0**2 + 2*m*x*y0 - 2*m*x0*y0 - x + y0**2
重根條件 = 2*m*y0 - 1
解得斜率 m = [1/(2*y0)]
\(2m y_0 - 1 = 0\) 給出 \(m = \frac{1}{2y_0}\) 。由 \(y_0^2 = x_0\) 可知這正是 \(\frac{\mathrm{d}}{\mathrm{d}x}\sqrt{x} = \frac{1}{2\sqrt{x}}\) ——費馬用重根條件算出的斜率,和用極限定義算出的斜率是同一個東西。這是本節最重要的對照:費馬的兩種方法在符號運算層面是等價的,只是路徑不同。
我們再把阿波羅尼奧斯的拋物線 \(y^2 = 4ax\) 用同一套「適當法」處理,並證明「二重根」確實成立:
import sympy as sp
a, x, y = sp.symbols('a x y', positive=True)
x0, y0 = sp.symbols('x0 y0', positive=True)
F = y**2 - 4*a*x
Fx = sp.diff(F, x)
Fy = sp.diff(F, y)
print("dF/dx =", Fx, " dF/dy =", Fy)
yprime = sp.simplify(-Fx / Fy)
print("隱函數微分給出 y' =", yprime)
print("P 處切線斜率 =", yprime.subs(y, y0))
tangent = sp.Eq(y0*y, 2*a*(x + x0))
print("切線方程 =", tangent)
# 驗證:把切線代回曲線,交點是二重根
y_from_tangent = sp.solve(sp.Eq(y0*y, 2*a*(x + x0)), y)[0]
resid = sp.expand((y**2 - 4*a*x).subs(y, y_from_tangent))
resid = sp.simplify(resid * y0**2 / (4*a))
resid = sp.expand(resid.subs(y0**2, 4*a*x0))
print("切線代回曲線後(乘以無關因子)= ", sp.expand(resid))
print("是否為 (x - x0)^2 的倍數?", sp.simplify(resid / (x - x0)**2))
預期輸出:
dF/dx = -4*a dF/dy = 2*y
隱函數微分給出 y' = 2*a/y
P 處切線斜率 = 2*a/y0
切線方程 = Eq(y*y0, 2*a*(x + x0))
切線代回曲線後(乘以無關因子)= a*x**2 - 2*a*x*x0 + a*x0**2
是否為 (x - x0)^2 的倍數? a
結果是 \(a(x - x_0)^2\) ——正是二重根。而且切線方程 \(y_0 y = 2a(x + x_0)\) 與阿波羅尼奧斯的公式一模一樣(注意是 \(+\) )。
順帶一提:-Fx/Fy 這個式子正是「隱函數微分」的通則。它在 1629 年就隱含在費馬的重根條件裡了,只是當時的表達是「把曲線方程寫成 \(F(x,y) = 0\) ,令 \(\frac{\mathrm{d}F}{\mathrm{d}x} = F_x + F_y \frac{\mathrm{d}y}{\mathrm{d}x} = 0\) 」——這要到 3.2 節萊布尼茲的記號出現後才寫得出來。
3.1.3 極值原理:為什麼「極值 → 切線水平」是自然的#
費馬手稿的後半部分處理的是另一個問題:求一條曲線的最大值與最小值。他的論證結構是這樣的:
- 設 \(f\) 在 \(x_0\) 處取到極大值;
- 那麼對任何小的 \(e > 0\) ,必有 \(f(x_0 + e) < f(x_0)\) 且 \(f(x_0 - e) < f(x_0)\) ;
- 換句話說,增量 \(f(x_0 + e) - f(x_0)\) 對 \(e\) 的正負號敏感:它必須在 \(e = 0\) 處「變號」;
- 而增量 \(f(x_0 + e) - f(x_0)\) 的一次項係數正是切線斜率;
- 所以切線斜率必須為零。
第 4 步是關鍵。費馬不只說「切線要水平」——他說的是:增量的變號行為,只能由一次項負責。一次項為零、且二次項為負,就能在 \(e\) 兩側都往下掉;反之若一次項不為零,往某一邊移動就會往上爬。
這個論證可以完全用 SymPy 的代數來做,而且不依賴任何微積分定理:
import sympy as sp
x, e = sp.symbols('x e', real=True)
# 費馬的極值法:位移 e 後,函數值之差必須「一階為零」
# 即差值是 e^2 的因式(否則往某一邊移動可讓值變大)
f = x**3 - 3*x**2 + x + 1
delta = sp.expand(f.subs(x, x + e) - f)
print("f(x+e) - f(x) =", sp.factor(delta))
print("一次項係數 =", sp.expand(delta).coeff(e, 1))
# 令一次項為零,求候選點
cand = sp.solve(sp.Eq(sp.expand(delta).coeff(e, 1), 0), x)
print("候選點 =", cand)
for c in cand:
d2 = sp.expand(delta.subs(x, c)).coeff(e, 2)
print(" x =", c, " 二次項係數 =", d2, "=> 極小" if d2 > 0 else "=> 極大")
預期輸出:
f(x+e) - f(x) = e*(e**2 + 3*e*x - 3*e + 3*x**2 - 6*x + 1)
一次項係數 = 3*x**2 - 6*x + 1
候選點 = [1 - sqrt(6)/3, sqrt(6)/3 + 1]
x = 1 - sqrt(6)/3 二次項係數 = -sqrt(6) => 極大
x = sqrt(6)/3 + 1 二次項係數 = sqrt(6) => 極小
注意:**一次項係數就是 \(f'(x)\) **。費馬在沒有導數記號的情況下,用「增量展開的一次項」這個概念做了完全相同的事。他只是還不習慣把這個量單獨命名為「導數」。
我們再回到費馬原理最簡單的版本,並且從極限定義算出切線斜率,而不是直接用 diff:
import sympy as sp
x, h = sp.symbols('x h', real=True)
f = x**2 - 3*x + 2
# 費馬原理:極值點處,切線必須平行於 x 軸
slope = sp.simplify(sp.limit((f.subs(x, x + h) - f) / h, h, 0))
print("切線斜率函數 =", slope)
sol = sp.solve(sp.Eq(slope, 0), x)
print("費馬原理給出的候選點 =", sol)
x0 = sol[0]
print("f(x0) =", sp.simplify(f.subs(x, x0)))
eps = sp.symbols('eps', positive=True)
left = sp.simplify(f.subs(x, x0 - eps) - f.subs(x, x0))
right = sp.simplify(f.subs(x, x0 + eps) - f.subs(x, x0))
print("左側差 =", left, " 右側差 =", right)
print("左差為正?", left.is_positive, " 右差為正?", right.is_positive)
預期輸出:
切線斜率函數 = 2*x - 3
費馬原理給出的候選點 = [3/2]
f(x0) = -1/4
左側差 = eps**2 右側差 = eps**2
左差為正? True 右差為正? True
這一段是整節的「核心回歸」:極值 \(\Rightarrow\) 斜率為零 \(\Rightarrow\) 切線水平。三個箭頭在 SymPy 裡是三行可執行程式碼。
而它的幾何意義值得用圖說明:
import numpy as np
import matplotlib.pyplot as plt
# 費馬的直覺:極值點處,切線必須「水平」
x = np.linspace(-3, 4, 400)
f = x**2 - 3*x + 2
x0 = 1.5
y0 = x0**2 - 3*x0 + 2
fig, ax = plt.subplots(figsize=(7, 4.5))
ax.plot(x, f, label=r"$f(x)=x^2-3x+2$", linewidth=2)
ax.axhline(y0, ls="--", color="gray", label="horizontal tangent (slope = 0)")
ax.scatter([x0], [y0], color="red", zorder=5, label=r"minimum $x_0=3/2$")
ax.axhline(0, color="black", linewidth=0.8)
ax.set_xlabel("x")
ax.set_ylabel("f(x)")
ax.legend()
ax.set_title("Fermat: at an extremum the tangent is parallel to the x-axis")
plt.tight_layout()
plt.savefig("/tmp/fermat_horizontal_tangent.png", dpi=120)
print("圖已存到 /tmp/fermat_horizontal_tangent.png")
預期輸出:
圖已存到 /tmp/fermat_horizontal_tangent.png
在極小點 \(x_0 = \frac{3}{2}\) 處,曲線「轉向」,切線水平。費馬的直覺是:如果這裡切線不水平,那沿切線方向稍微挪動,函數值就會朝某一側上升,與「極小」矛盾。
3.1.4 Rolle 定理的雛形(1657)#
費馬的極值原理還需要一個「連續性」假設,才能從「極值存在」推出「切線水平」。這個假設正是 1657 年 Michel Rolle(米歇爾・羅爾, 1653–1713)補上的。
Rolle 的《Miscellanea Mathematica》(巴黎,1657)原本是為了解多項式方程的實根個數而寫的。他證明了:若多項式在兩個相鄰整數處取異號,則中間必有實根(介值定理的雛形)。而他的核心工具,正是費馬的極值法:把 \(f(x) - f(a)\) 看成一個函數,在區間端點取到零值,若內部某處取到正的最大值,那麼該處切線必為水平——即 \(\frac{\mathrm{d}y}{\mathrm{d}x} = 0\) 。這就是後來以他命名的 Rolle 定理:
若 \(f\) 在 \([a, b]\) 上連續、在 \((a, b)\) 上可導,且 \(f(a) = f(b)\) ,則存在 \(c \in (a, b)\) 使得 \(f'(c) = 0\) 。
這個定理的歷史意義在於:它是第一個把「極值」與「導數為零」明確連結起來的定理,而且它的敘述裡完全沒有「無窮小」——它是從費馬的增量論證,經過「連續性」的補充,走向柯西、魏爾斯特拉斯的 ε-δ 語言(第 2 章)的關鍵一步。19 世紀的拉格朗日中值定理(中值定理的完整版)正是 Rolle 定理的加強。
我們用 SymPy 驗證 Rolle 定理的一個具體實例:
import sympy as sp
x = sp.Symbol('x', real=True)
# Rolle 定理的雛形:f 在 [a,b] 上連續、f(a)=f(b)、可導 => 存在 c 使 f'(c)=0
f = (x - 1)*(x - 2)*(x - 3)
print("f 展開 =", sp.expand(f))
print("f(1) =", f.subs(x, 1), " f(3) =", f.subs(x, 3), " 相等?", f.subs(x, 1) == f.subs(x, 3))
fp = sp.expand(sp.diff(f, x))
print("f' =", fp)
roots = sp.solve(sp.Eq(fp, 0), x)
print("f'=0 的解 =", roots)
for r in roots:
print(" c =", r, " 介於 (1,3)?", bool(1 < r < 3), " f(c) =", sp.simplify(f.subs(x, r)))
預期輸出:
f 展開 = x**3 - 6*x**2 + 11*x - 6
f(1) = 0 f(3) = 0 相等? True
f' = 3*x**2 - 12*x + 11
f'=0 的解 = [2 - sqrt(3)/3, sqrt(3)/3 + 2]
c = 2 - sqrt(3)/3 介於 (1,3)? True f(c) = 2*sqrt(3)/9
c = sqrt(3)/3 + 2 介於 (1,3)? True f(c) = -2*sqrt(3)/9
兩點值得注意:
- Rolle 定理給出的是至少一個這樣的 \(c\) ;這裡 \(f\) 是三次 polynomial, \(f'\) 是二次,有兩個根都在 \((1, 3)\) 內。這不是巧合:三次多項式有兩個「轉向點」,恰好落在端點同高的區間裡。
- \(f(1) = f(3) = 0\) 這個條件不能省。去掉它, \(f\) 仍然有水平切線,但那是另一回事( \(f\) 自己在極值點處就有水平切線),與 Rolle 的論證無關。
3.1.5 費馬原理的侷限:水平切線不等於極值#
費馬原理的方向是單向的:極值 \(\Rightarrow\) 切線水平。逆向不成立——水平切線可能只是拐點。
import sympy as sp
x = sp.symbols('x', real=True)
# 反例:f(x) = x^3 在 x=0 處切線水平,但 0 是拐點而非極值
f = x**3
fp = sp.diff(f, x)
print("f' =", fp, " f'(0) =", fp.subs(x, 0))
eps = sp.symbols('eps', positive=True)
print("f(eps) - f(0) =", sp.simplify(f.subs(x, eps) - f.subs(x, 0)))
print("f(-eps) - f(0) =", sp.simplify(f.subs(x, -eps) - f.subs(x, 0)))
print("左側差為正?", (f.subs(x, -eps) - f.subs(x, 0)).is_positive,
" 右側差為正?", (f.subs(x, eps) - f.subs(x, 0)).is_positive)
預期輸出:
f' = 3*x**2 f'(0) = 0
f(eps) - f(0) = eps**3
f(-eps) - f(0) = -eps**3
左側差為正? False 右側差為正? True
左側差為負、右側差為正——兩側異號,所以 \(x = 0\) 不是極值點,而是拐點。要區分「極值」與「拐點」,需要看二次項的符號而不是只看一次項是否為零。費馬知道這一點(他的手稿裡確實對極值與拐點做了區分),但要把它寫成一般定理,還需要 19 世紀對高階導數的系統理論(第 5 章)。
3.1.6 從費馬到下一節:記號的缺口#
費馬已經擁有了:
| 費馬的武器 | 現代對應 |
|---|---|
| 增量比值 \(\frac{f(x+e)-f(x)}{e}\) 的極限 | 導數定義 \(f'(x) = \lim_{h \to 0} \frac{f(x+h)-f(x)}{h}\) |
| 增量展開的一次項 | \(f'(x)\cdot e\) |
| 重根條件(二重根 \(\Leftrightarrow\) 相切) | 隱函數微分 \(-F_x / F_y\) |
| 極值 \(\Rightarrow\) 切線水平 | \(f'(x_0) = 0\) |
| 只對 \(x^{p/q}\) 有效的一般公式 | 冪函數求導 \(\frac{\mathrm{d}}{\mathrm{d}x}x^n = n x^{n-1}\) |
但他缺了一樣東西:一個能同時處理「任意函數」並且記錄運算規則的記號。費馬的公式寫在具體的曲線上;一旦換一個函數,他得從頭再推。
這正是 3.2 節的主題:萊布尼茲的 \(\mathrm{d}x\) 與 \(\frac{\mathrm{d}y}{\mathrm{d}x}\) ,一套可以攜帶、可組合、可套用到任何函數的記號。而 SymPy 的 diff 函數,本質上就是把這套記號變成程式——sp.diff(f, x) 做的事,正是萊布尼茲在 1684 年《論極限的意義》裡用 \(f'(x)\) 表達的運算。
習題#
習題 3.1.1(費馬的尋常法) 用 sp.limit 從零出發(不要用 sp.diff)計算以下函數的導數,並說明你用了費馬的哪一種方法:
(a) \(f(x) = x^{3/2}\) ; (b) \(f(x) = x^{-1/3}\) ; (c) \(f(x) = x^{5/4}\) 。
提示:把 sp.limit((f.subs(x, x+h) - f)/h, h, 0) 裡的 f 換成你的函數即可。
習題 3.1.2(阿波羅尼奧斯的拋物線切線) (a) 用 3.1.2 節的「二重根法」求橢圓 \(\frac{x^2}{a^2} + \frac{y^2}{b^2} = 1\) 在點 \((a, 0)\) 處的切線,並用 sp.factor 驗證交點確為二重根。 (b) 求同一橢圓在點 \((x_0, y_0)\) 處的切線,證明它可以寫成 \(\frac{x_0 x}{a^2} + \frac{y_0 y}{b^2} = 1\) 。 (c) 比較雙曲線 \(\frac{x^2}{a^2} - \frac{y^2}{b^2} = 1\) 的切線方程,指出它與橢圓的差別只在一個符號。
習題 3.1.3(費馬的極值法) (a) 用「增量一次項為零」的方法求 \(f(x) = x^4 - 4x^3 + 6x^2\) 的所有極值點,並用二次項係數判斷每個候選點是極大、極小還是拐點。 (b) 對 \(f(x) = x^3\) 重做一次,證明 \(x = 0\) 雖然滿足 \(f'(0) = 0\) ,卻是拐點。寫出你用來區分的二次項的特徵。 (c) 說明為什麼「 \(f'(x_0) = 0\) 」是極值的必要條件而非充分條件。
習題 3.1.4(Rolle 定理) (a) 令 \(f(x) = \sin(2\pi x)\) ,驗證在 \([0, 1]\) 上存在 \(c\) 使 \(f'(c) = 0\) ,並用 sp.solve 找出所有這樣的 \(c\) 。 (b) 令 \(f(x) = e^x - x - 1\) 。驗證 \(f(0) = f'(0) = 0\) ,並找出 \(f\) 在 \(\mathbb{R}\) 上的所有極值點(注意: \(f'\) 是超越方程,SymPy 的 solve 可能求不出,此時請用 sp.nsolve 搭配區間)。 (c) 敘述並舉例說明:若把 Rolle 定理的 \(f(a) = f(b)\) 條件拿掉,結論「存在 \(c\) 使 \(f'(c) = 0\) 」是否仍然對任意可導函數成立?用一個具體反例說明。
習題 3.1.5(費馬的「適當法」推廣) 費馬的二重根法不僅適用於拋物線。請用 sp.diff + sp.solve(對 \(x\) 求導代回切點,再用 sp.solve 解斜率 \(m\) )求出:
(a) 曲線 \(y = x^3\) 在 \(x_0 = 1\) 處的切線; (b) 曲線 \(x y = 1\) (即 \(y = 1/x\) )在點 \((1, 1)\) 處的切線; (c) 曲線 \(y = \sin x\) 在 \(x_0 = 0\) 處的切線。
並說明:為什麼對某些曲線(例如 \(y = \sin x\) 在 \(x_0 = 0\) ),「二重根」的條件退化成了「一次項係數為零」?
小結#
| 歷史事件 | 年份 | 對現代數學的貢獻 |
|---|---|---|
| 阿波羅尼奧斯《圓錐曲線論》 | 前 240–190 | 拋物線切線 \(y_0 y = 2a(x + x_0)\) ;切線的「切割」觀念 |
| 阿基米德《方法論》 | 前 200 | 用機械直覺求面積;費馬極值法的精神祖先 |
| 費馬《切線與極值》手稿 | 1629 | 尋常法( \(x^{p/q}\) 增量比值)與適當法(二重根 \(\Leftrightarrow\) 相切);極值 \(\Rightarrow\) 切線水平 |
| Rolle《Miscellanea Mathematica》 | 1657 | 介值定理雛形;把「極值」與「導數為零」正式連結 |
| 拉格朗日中值定理 | 1787 | Rolle 定理的加強(第 5 章) |
- 費馬的兩種方法在 SymPy 裡是兩個
sp.limit與一個sp.solve:一個從增量比值出發,一個從重根條件出發。 - 費馬原理的方向性很重要:極值 \(\Rightarrow f' = 0\) ,但 \(f' = 0 \not\Rightarrow\) 極值( \(x^3\) 的反例)。
- 費馬缺的是記號。一套能攜帶、能組合、能推廣的記號,要等到 1675 年萊布尼茲的 \(\mathrm{d}x\) 。
下一節,我們進入萊布尼茲的記號世界,看 \(\frac{\mathrm{d}y}{\mathrm{d}x}\) 如何從「一個曲線的切線斜率」變成「所有函數的通用運算」。