第 10 章 導數與微分¶
本章重點:
- 從「瞬間變化率」與「切線斜率」的角度理解導數。
- 使用極限定義導數,並用 SymPy 驗證與計算。
- 學習基本微分法則:常數倍、和差、乘法、商法則、鏈鎖律(鏈式法則)。
- 會求常見函數的導數:多項式、三角函數、指數與對數函數等。
- 使用導數分析函數的單調性、極大極小值與圖形形狀。
- 透過幾個應用例子,連結到物理(速度、加速度)、經濟(邊際成本)等情境。
本章是微積分的核心之一。我們會一邊用幾何直觀與生活語言說明,一邊用 SymPy 實際運算與驗證。
10.1 導數的直觀:從平均速度到瞬間速度¶
回顧第 9 章的例子:
- 若物體位置為 $s(t)$,在時間區間 $[t, t+h]$ 的平均速度為
$$v_{avg} = \frac{s(t+h) - s(t)}{h}.$$
當 $h \to 0$ 時,若極限存在,即稱為瞬間速度:
$$v(t) = \lim_{h\to 0} \frac{s(t+h) - s(t)}{h}.$$
這個極限就是導數:
$$s'(t) = \lim_{h\to 0} \frac{s(t+h) - s(t)}{h}.$$
例如 $s(t) = t^2$,我們先用 SymPy 再算一次這個極限:
import sympy as sp
sp.init_printing()
t, h = sp.symbols('t h', real=True)
s = t**2
diff_quot = (s.subs(t, t+h) - s)/h
simplified = sp.simplify(diff_quot)
limit_h0 = sp.limit(diff_quot, h, 0)
simplified, limit_h0
這裡結果是:
- 差商化簡後為 $2t + h$。
- 當 $h \to 0$ 時,極限為 $2t$。
我們就說:$s'(t) = 2t$。
10.2 導數的定義與記號¶
一般函數 $y = f(x)$ 在 $x=a$ 的導數定義為:
$$f'(a) = \lim_{h\to 0} \frac{f(a+h) - f(a)}{h},$$
如果極限存在。
常見的導數記號包括:
- $f'(x)$
- $y'$
- $\dfrac{dy}{dx}$(強調 $y$ 與 $x$ 之間的關係)
- $\dfrac{df}{dx}$
幾何上,$f'(a)$ 就是曲線 $y=f(x)$ 在點 $(a, f(a))$ 的切線斜率。
x = sp.symbols('x', real=True)
f = x**2
f_prime = sp.diff(f, x)
f, f_prime
再試一些基本例子:
- $g(x) = 3x^3 - 5x + 2$
- $h(x) = \sin x$
- $k(x) = e^x$
- $m(x) = \ln x$(定義域 $x>0$)
g = 3*x**3 - 5*x + 2
h = sp.sin(x)
k = sp.exp(x)
m = sp.log(x)
g_prime = sp.diff(g, x)
h_prime = sp.diff(h, x)
k_prime = sp.diff(k, x)
m_prime = sp.diff(m, x)
g_prime, h_prime, k_prime, m_prime
10.4 基本微分法則¶
從上述例子,我們可以歸納出一些規則:
- 常數的導數為 0:$\dfrac{d}{dx} C = 0$。
- $x^n$ 的導數為:$\dfrac{d}{dx} x^n = n x^{n-1}$(多項式規則)。
- 線性:$\dfrac{d}{dx}(af(x) + bg(x)) = a f'(x) + b g'(x)$。
- 三角函數:$\dfrac{d}{dx} \sin x = \cos x$, $\dfrac{d}{dx} \cos x = -\sin x$。
- 指數與對數:$\dfrac{d}{dx} e^x = e^x$, $\dfrac{d}{dx} \ln x = \dfrac{1}{x}$($x>0$)。
在 SymPy 裡面,這些規則已內建,我們可以利用 diff 直接計算與驗證。
10.5 乘法與商法則¶
若 $y = u(x) \cdot v(x)$,則導數為:
乘法法則(積的微分):
$$\frac{d}{dx}[u(x)v(x)] = u'(x)v(x) + u(x)v'(x).$$
若 $y = \dfrac{u(x)}{v(x)}$,則:
商法則:
$$\frac{d}{dx}\left[\frac{u(x)}{v(x)}\right] = \frac{u'(x)v(x) - u(x)v'(x)}{[v(x)]^2}.$$
用一個例子來看看:
$f(x) = (x^2+1)(x-3)$。
u = x**2 + 1
v = x - 3
f = u*v
f_prime = sp.diff(f, x)
sp.expand(f), sp.expand(f_prime)
你可以手動用乘法法則計算一次,檢查是否與 SymPy 結果一致。
再看商法則例子:$g(x) = \dfrac{x^2+1}{x-1}$。
g = (x**2 + 1)/(x - 1)
g_prime = sp.diff(g, x)
sp.simplify(g_prime)
10.6 鏈式法則(鏈鎖律):複合函數的導數¶
如果 $y = f(g(x))$ 是兩個函數的複合,導數的規則是:
$$\frac{d}{dx} f(g(x)) = f'(g(x)) \cdot g'(x).$$
這稱為鏈式法則。它在實務中非常常用,尤其是處理指數、對數、三角函數的組合時。
例:$y = (3x^2 - 1)^5$。
- 內層:$g(x) = 3x^2 - 1$。
- 外層:$f(u) = u^5$。
則 $y' = 5(3x^2 - 1)^4 \cdot 6x = 30x(3x^2 - 1)^4$。
用 SymPy 驗證:
y_expr = (3*x**2 - 1)**5
y_prime = sp.diff(y_expr, x)
sp.simplify(y_prime)
再看一個包含三角函數的例子:$y = \sin(x^2)$。
y2 = sp.sin(x**2)
y2_prime = sp.diff(y2, x)
sp.simplify(y2_prime)
這裡可以解讀為:
- 外層:$f(u) = \sin u$,$f'(u) = \cos u$。
- 內層:$g(x) = x^2$,$g'(x) = 2x$。
- 因此:$\dfrac{d}{dx} \sin(x^2) = \cos(x^2) \cdot 2x$。
10.7 高階導數與符號微分¶
導數本身也是一個函數,可以再對它求導,得到二階導數 $f''(x)$。
類似地可以定義三階、四階導數,甚至第 $n$ 階導數。
在 SymPy 中,可以使用 sp.diff(f, x, n) 計算第 $n$ 階導數。
例:$f(x) = x^3$。
f = x**3
f1 = sp.diff(f, x, 1) # 一階導數
f2 = sp.diff(f, x, 2) # 二階導數
f3 = sp.diff(f, x, 3) # 三階導數
f1, f2, f3
在物理中:
- 位置 $s(t)$ 的一階導數是速度 $v(t)$。
- 二階導數則是加速度 $a(t)$。
高階導數能描述更微妙的變化率。
10.8 導數與切線:切線方程¶
已知曲線 $y = f(x)$ ,若在 $x=a$ 處導數為 $f'(a)$, 則該點切線方程為:
$$y - f(a) = f'(a)(x-a).$$
例:$f(x) = x^2$,在 $x=1$ 處的切線。
x = sp.symbols('x', real=True)
f = x**2
a = 1
f_prime = sp.diff(f, x)
slope = f_prime.subs(x, a)
point = f.subs(x, a)
tangent = slope*(x-a) + point
f_prime, slope, point, tangent
我們可以畫出 $y=x^2$ 與該切線:
sp.plot(f, tangent, (x, -1, 3), legend=True,
title='The tangent line of y = x^2 at x=1')
<sympy.plotting.backends.matplotlibbackend.matplotlib.MatplotlibBackend at 0x7f1fbc3c0590>
你可以自行把 $a$ 換成其他值(例如 0, 2, -1),觀察切線如何變化。
10.9 利用導數分析函數:單調性與極大極小值¶
若 $f'(x) > 0$ 在某區間內成立,代表 $f$ 在該區間遞增; 若 $f'(x) < 0$,則 $f$ 在該區間遞減。
若在某點 $c$ 附近:
- $f'$ 由正變負,$f$ 可能在 $c$ 取得局部極大值。
- $f'$ 由負變正,$f$ 可能在 $c$ 取得局部極小值。
例:$f(x) = x^3 - 3x$。
x = sp.symbols('x', real=True)
f = x**3 - 3*x
f_prime = sp.diff(f, x)
critical_points = sp.solve(sp.Eq(f_prime, 0), x)
f, f_prime, critical_points
計算這些臨界點的函數值:
for c in critical_points:
print("x =", c, ", f(x) =", f.subs(x, c))
x = -1 , f(x) = 2 x = 1 , f(x) = -2
可以再畫圖來觀察:
sp.plot(f, (x, -3, 3), title='f(x) = x^3 - 3x')
<sympy.plotting.backends.matplotlibbackend.matplotlib.MatplotlibBackend at 0x7f1f8e413890>
從圖與符號計算中,可以看出:
- 在某點附近,圖形有「山峰」或「谷底」,對應到極大/極小值。
- 導數為 0 的點是重要線索。
10.10 啟發性例子一:物理中的速度與加速度¶
假設物體的位置為:
$s(t) = 5t^2 + 2t$(單位:公尺,時間 $t$ 單位為秒)。
則:
- 速度:$v(t) = s'(t)$。
- 加速度:$a(t) = v'(t) = s''(t)$。
利用 SymPy 計算:
t = sp.symbols('t', real=True)
s = 5*t**2 + 2*t
v = sp.diff(s, t)
a = sp.diff(v, t)
s, v, a
我們得到:
- $v(t) = 10t + 2$。
- $a(t) = 10$(常數加速度)。
你可以代入 $t=0,1,2,...$ 等值,觀察速度如何增加。
10.11 啟發性例子二:成本函數與邊際成本¶
在經濟學中,成本函數 $C(q)$ 給出產量 $q$ 時的總成本。
$C'(q)$ 稱為邊際成本(marginal cost),代表「多生產一點點所增加的成本」的近似。
例:假設成本函數為:
$C(q) = 1000 + 5q + 0.1q^2$。
用 SymPy 計算 $C'(q)$:
q = sp.symbols('q', real=True)
C = 1000 + 5*q + 0.1*q**2
MC = sp.diff(C, q)
C, MC
假設目前產量為 $q=10$,邊際成本為:
MC_10 = MC.subs(q, 10)
MC_10
這大致代表將產量從 10 增加到 11 時,成本大約增加多少(在變化不大的情況下)。 導數在這裡幫助我們把「小變動」與「近似線性變化」連結起來。
10.12 啟發性例子三:圖形平滑程度與二階導數¶
二階導數 $f''(x)$ 可以幫助我們了解圖形的「彎曲」情況:
- 若 $f''(x) > 0$,圖形「向上凹」(像笑臉)。
- 若 $f''(x) < 0$,圖形「向下凹」(像哭臉)。
例:$f(x) = x^4 - 4x^2$。
x = sp.symbols('x', real=True)
f = x**4 - 4*x**2
f_prime = sp.diff(f, x)
f_second = sp.diff(f_prime, x)
f, f_prime, f_second
畫出圖形觀察:
sp.plot(f, (x, -3, 3), title='f(x) = x^4 - 4x^2')
<sympy.plotting.backends.matplotlibbackend.matplotlib.MatplotlibBackend at 0x7f1f8e1ac190>
你可以:
- 解 $f'(x) = 0$ 找可能的極大/極小點。
- 再看這些點附近的 $f''(x)$ 是正還是負。
這個思考方式在曲線描繪與最佳化問題中非常重要。
10.13 本章小結¶
本章你學到了:
- 導數的極限定義,與其在物理上作為「瞬間速度」、在幾何上作為「切線斜率」的意義。
- 使用 SymPy 的
diff計算各種函數的導數,包含高階導數。 - 基本微分法則:常數、冪次、多項式、三角函數、指數與對數函數。
- 乘法法則、商法則及鏈式法則,處理較複雜的函數組合。
- 利用導數分析函數的單調性與極大極小值,並寫出切線方程。
- 在物理(速度/加速度)、經濟(邊際成本)、圖形彎曲程度分析等情境中應用導數。
10.14 練習題¶
請在本 Notebook 中新增儲存格,試著完成以下練習:
從定義計算導數(簡單例子)
令 $f(x) = x^2$。
(a) 用極限定義 $f'(a) = \lim_{h\to 0} \dfrac{f(a+h)-f(a)}{h}$ 手算一次。
(b) 用 SymPy 實作差商並對 $h \to 0$ 取極限,確認結果為 $2a$。基本導數計算
使用 SymPy 求下列函數的導數,並盡量手算一次對照:
(a) $f(x) = 3x^4 - 2x^2 + 7$
(b) $g(x) = \sqrt{x} = x^{1/2}$(提示:用冪次規則)
(c) $h(x) = \dfrac{1}{x} = x^{-1}$。乘法與商法則
(a) $f(x) = (x^2+1)\sin x$,利用乘法法則求 $f'(x)$。
(b) $g(x) = \dfrac{x^2+1}{x}$,利用商法則求 $g'(x)$,並用 SymPy 驗證。鏈式法則練習
使用鏈式法則與 SymPy 計算:
(a) $y = (2x+3)^5$
(b) $y = \ln(3x^2+1)$
(c) $y = e^{-x^2}$。切線方程
令 $f(x) = x^3$。
(a) 求在 $x=1$ 處的導數 $f'(1)$。
(b) 寫出該點的切線方程。
(c) 用 SymPy 畫出 $f(x)$ 與切線,觀察圖形。極值與單調性
令 $f(x) = x^3 - 6x^2 + 9x$。
(a) 求 $f'(x)$,解出 $f'(x) = 0$ 的臨界點。
(b) 判斷這些點是局部極大值、局部極小值或其他。
(c) 用 SymPy 繪圖,從圖形驗證你的判斷。應用與加分題:物理或經濟情境
(a) 自己設計一個位置函數 $s(t)$(例如 $s(t) = t^3 - 3t^2 + t$),求出速度與加速度,並用文字解釋物體的運動特性。
(b) 自己設計一個成本函數 $C(q)$,例如 $C(q) = 500 + 8q + 0.05q^2$,求出邊際成本 $C'(q)$,並解釋在某個產量附近(自選 $q$ 值)多生產一單位大約會增加多少成本。