第 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 再算一次這個極限:

In [1]:
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
Out[1]:
$\displaystyle \left( h + 2 t, \ 2 t\right)$

這裡結果是:

  • 差商化簡後為 $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))$ 的切線斜率。

10.3 使用 SymPy 計算導數:diff¶

SymPy 使用 diff 來做微分。

例:$f(x) = x^2$,求 $f'(x)$:

In [2]:
x = sp.symbols('x', real=True)
f = x**2
f_prime = sp.diff(f, x)
f, f_prime
Out[2]:
$\displaystyle \left( x^{2}, \ 2 x\right)$

再試一些基本例子:

  • $g(x) = 3x^3 - 5x + 2$
  • $h(x) = \sin x$
  • $k(x) = e^x$
  • $m(x) = \ln x$(定義域 $x>0$)
In [3]:
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
Out[3]:
$\displaystyle \left( 9 x^{2} - 5, \ \cos{\left(x \right)}, \ e^{x}, \ \frac{1}{x}\right)$

10.4 基本微分法則¶

從上述例子,我們可以歸納出一些規則:

  1. 常數的導數為 0:$\dfrac{d}{dx} C = 0$。
  2. $x^n$ 的導數為:$\dfrac{d}{dx} x^n = n x^{n-1}$(多項式規則)。
  3. 線性:$\dfrac{d}{dx}(af(x) + bg(x)) = a f'(x) + b g'(x)$。
  4. 三角函數:$\dfrac{d}{dx} \sin x = \cos x$, $\dfrac{d}{dx} \cos x = -\sin x$。
  5. 指數與對數:$\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)$。

In [4]:
u = x**2 + 1
v = x - 3
f = u*v
f_prime = sp.diff(f, x)
sp.expand(f), sp.expand(f_prime)
Out[4]:
$\displaystyle \left( x^{3} - 3 x^{2} + x - 3, \ 3 x^{2} - 6 x + 1\right)$

你可以手動用乘法法則計算一次,檢查是否與 SymPy 結果一致。

再看商法則例子:$g(x) = \dfrac{x^2+1}{x-1}$。

In [5]:
g = (x**2 + 1)/(x - 1)
g_prime = sp.diff(g, x)
sp.simplify(g_prime)
Out[5]:
$\displaystyle \frac{- x^{2} + 2 x \left(x - 1\right) - 1}{\left(x - 1\right)^{2}}$

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 驗證:

In [6]:
y_expr = (3*x**2 - 1)**5
y_prime = sp.diff(y_expr, x)
sp.simplify(y_prime)
Out[6]:
$\displaystyle 30 x \left(3 x^{2} - 1\right)^{4}$

再看一個包含三角函數的例子:$y = \sin(x^2)$。

In [7]:
y2 = sp.sin(x**2)
y2_prime = sp.diff(y2, x)
sp.simplify(y2_prime)
Out[7]:
$\displaystyle 2 x \cos{\left(x^{2} \right)}$

這裡可以解讀為:

  • 外層:$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$。

In [8]:
f = x**3
f1 = sp.diff(f, x, 1)  # 一階導數
f2 = sp.diff(f, x, 2)  # 二階導數
f3 = sp.diff(f, x, 3)  # 三階導數
f1, f2, f3
Out[8]:
$\displaystyle \left( 3 x^{2}, \ 6 x, \ 6\right)$

在物理中:

  • 位置 $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$ 處的切線。

In [9]:
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
Out[9]:
$\displaystyle \left( 2 x, \ 2, \ 1, \ 2 x - 1\right)$

我們可以畫出 $y=x^2$ 與該切線:

In [10]:
sp.plot(f, tangent, (x, -1, 3), legend=True,
        title='The tangent line of y = x^2 at x=1')
No description has been provided for this image
Out[10]:
<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$。

In [11]:
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
Out[11]:
$\displaystyle \left( x^{3} - 3 x, \ 3 x^{2} - 3, \ \left[ -1, \ 1\right]\right)$

計算這些臨界點的函數值:

In [12]:
for c in critical_points:
    print("x =", c, ", f(x) =", f.subs(x, c))
x = -1 , f(x) = 2
x = 1 , f(x) = -2

可以再畫圖來觀察:

In [13]:
sp.plot(f, (x, -3, 3), title='f(x) = x^3 - 3x')
No description has been provided for this image
Out[13]:
<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 計算:

In [14]:
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
Out[14]:
$\displaystyle \left( 5 t^{2} + 2 t, \ 10 t + 2, \ 10\right)$

我們得到:

  • $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)$:

In [15]:
q = sp.symbols('q', real=True)
C = 1000 + 5*q + 0.1*q**2
MC = sp.diff(C, q)
C, MC
Out[15]:
$\displaystyle \left( 0.1 q^{2} + 5 q + 1000, \ 0.2 q + 5\right)$

假設目前產量為 $q=10$,邊際成本為:

In [16]:
MC_10 = MC.subs(q, 10)
MC_10
Out[16]:
$\displaystyle 7.0$

這大致代表將產量從 10 增加到 11 時,成本大約增加多少(在變化不大的情況下)。 導數在這裡幫助我們把「小變動」與「近似線性變化」連結起來。

10.12 啟發性例子三:圖形平滑程度與二階導數¶

二階導數 $f''(x)$ 可以幫助我們了解圖形的「彎曲」情況:

  • 若 $f''(x) > 0$,圖形「向上凹」(像笑臉)。
  • 若 $f''(x) < 0$,圖形「向下凹」(像哭臉)。

例:$f(x) = x^4 - 4x^2$。

In [17]:
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
Out[17]:
$\displaystyle \left( x^{4} - 4 x^{2}, \ 4 x^{3} - 8 x, \ 12 x^{2} - 8\right)$

畫出圖形觀察:

In [18]:
sp.plot(f, (x, -3, 3), title='f(x) = x^4 - 4x^2')
No description has been provided for this image
Out[18]:
<sympy.plotting.backends.matplotlibbackend.matplotlib.MatplotlibBackend at 0x7f1f8e1ac190>

你可以:

  • 解 $f'(x) = 0$ 找可能的極大/極小點。
  • 再看這些點附近的 $f''(x)$ 是正還是負。

這個思考方式在曲線描繪與最佳化問題中非常重要。

10.13 本章小結¶

本章你學到了:

  • 導數的極限定義,與其在物理上作為「瞬間速度」、在幾何上作為「切線斜率」的意義。
  • 使用 SymPy 的 diff 計算各種函數的導數,包含高階導數。
  • 基本微分法則:常數、冪次、多項式、三角函數、指數與對數函數。
  • 乘法法則、商法則及鏈式法則,處理較複雜的函數組合。
  • 利用導數分析函數的單調性與極大極小值,並寫出切線方程。
  • 在物理(速度/加速度)、經濟(邊際成本)、圖形彎曲程度分析等情境中應用導數。

10.14 練習題¶

請在本 Notebook 中新增儲存格,試著完成以下練習:

  1. 從定義計算導數(簡單例子)
    令 $f(x) = x^2$。
    (a) 用極限定義 $f'(a) = \lim_{h\to 0} \dfrac{f(a+h)-f(a)}{h}$ 手算一次。
    (b) 用 SymPy 實作差商並對 $h \to 0$ 取極限,確認結果為 $2a$。

  2. 基本導數計算
    使用 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}$。

  3. 乘法與商法則
    (a) $f(x) = (x^2+1)\sin x$,利用乘法法則求 $f'(x)$。
    (b) $g(x) = \dfrac{x^2+1}{x}$,利用商法則求 $g'(x)$,並用 SymPy 驗證。

  4. 鏈式法則練習
    使用鏈式法則與 SymPy 計算:
    (a) $y = (2x+3)^5$
    (b) $y = \ln(3x^2+1)$
    (c) $y = e^{-x^2}$。

  5. 切線方程
    令 $f(x) = x^3$。
    (a) 求在 $x=1$ 處的導數 $f'(1)$。
    (b) 寫出該點的切線方程。
    (c) 用 SymPy 畫出 $f(x)$ 與切線,觀察圖形。

  6. 極值與單調性
    令 $f(x) = x^3 - 6x^2 + 9x$。
    (a) 求 $f'(x)$,解出 $f'(x) = 0$ 的臨界點。
    (b) 判斷這些點是局部極大值、局部極小值或其他。
    (c) 用 SymPy 繪圖,從圖形驗證你的判斷。

  7. 應用與加分題:物理或經濟情境
    (a) 自己設計一個位置函數 $s(t)$(例如 $s(t) = t^3 - 3t^2 + t$),求出速度與加速度,並用文字解釋物體的運動特性。
    (b) 自己設計一個成本函數 $C(q)$,例如 $C(q) = 500 + 8q + 0.05q^2$,求出邊際成本 $C'(q)$,並解釋在某個產量附近(自選 $q$ 值)多生產一單位大約會增加多少成本。

回首頁