跳轉到

5.3 積分#

本節目標#

  • 會用 integrate() 求不定積分與定積分,並理解面積意義
  • 誠實面對「有些積分沒有初等函數解」這件事
  • 用 Riemann 和做數值實驗,理解定積分的定義
  • 會算廣義積分與部分分式積分,並驗證微積分基本定理(FTC)

不定積分:反過來問#

微分問「 \(f\) 的導數是什麼」,積分反過來問「誰的導數是 \(f\) 」。若 \(F'(x) = f(x)\) ,則 \(F\) 是 \(f\) 的反導數,記作:

\[ \int f(x)\, dx = F(x) + C \]

\(+C\) (積分常數)不可省略:因為常數的導數是 \(0\) ,反導數永遠一整個家族。

from sympy import symbols, integrate, sin, exp, oo, apart

x = symbols('x')

integrate(x**2, x)       # x**3/3
integrate(sin(x), x)     # -cos(x)
integrate(1/x, x)        # log(x)

注意 SymPy 不會顯示 \(+C\) ——它預設給「某個」反導數。因為任意兩個反導數只差常數,這在數學上無妨,但寫報告時要自己補上。

誠實討論:有些積分根本沒有初等函數解#

試試這一題:

integrate(exp(-x**2), x)    # sqrt(pi)*erf(x)/2

SymPy 沒有給出 \(\sin\) 、 \(\cos\) 、 \(\exp\) 這類你熟悉的組合,而是冒出一個 erf——誤差函數,它的定義恰恰就是 \(\operatorname{erf}(x) = \frac{2}{\sqrt{\pi}} \int_0^x e^{-t^2} dt\) 。

這不是 SymPy 能力不足。數學上可以證明: \(e^{-x^2}\) 的反導數不存在初等函數表達式(Liouville 定理的推論)。這樣的函數還有不少:

integrate(sin(x)/x, x)          # Si(x)(正弦積分)
integrate(exp(x)/x, x)          # Ei(x)(指數積分)
integrate(sin(x**2), x)         # FresnelS(菲涅耳積分)

正確的態度:沒有初等公式 \(\ne\) 積不出來。反導數一定存在(連續函數必有),只是「寫不出名字」。此時有三條路:定義新函數(如 erf)、數值積分、或冪級數展開(5.4 節)。這也是 \(e^{-x^2}\) (常態分布的核心)在統計裡要靠查表的歷史原因。

定積分與面積意義#

定積分 \(\int_a^b f(x)\,dx\) 的幾何意義:曲線 \(y = f(x)\) 下方、 \(x\) 軸上方、界於 \(a\) 與 \(b\) 之間的(有號)面積。

integrate(x**2, (x, 0, 1))          # 1/3
integrate(sin(x), (x, 0, sympy.pi)) # 2
integrate(Abs(x), (x, -2, 2))       # 4(V 形面積,用絕對值)

呼叫格式 integrate(expr, (x, a, b)),上下限用 tuple 包起來。

動手實驗:Riemann 和的數值實驗#

定積分的嚴格定義是 Riemann 和的極限:把 \([a, b]\) 切成 \(n\) 等份,用長方形面積加總:

\[ \int_a^b f(x)\,dx = \lim_{n \to \infty} \sum_{i=1}^{n} f(x_i^*) \, \Delta x, \qquad \Delta x = \frac{b-a}{n} \]

我們用 \(\int_0^1 x^2\,dx = \frac{1}{3}\) 做實驗,看 \(n\) 增大時誤差如何縮小:

import numpy as np

def riemann(f, a, b, n, mode='mid'):
    xs = np.linspace(a, b, n + 1)
    dx = (b - a) / n
    if mode == 'left':
        pts = xs[:-1]
    elif mode == 'right':
        pts = xs[1:]
    else:                      # 中點法
        pts = (xs[:-1] + xs[1:]) / 2
    return np.sum(f(pts)) * dx

f = lambda t: t**2
exact = 1/3
for n in [4, 10, 100, 1000, 10000]:
    L, R, M = riemann(f, 0, 1, n, 'left'), riemann(f, 0, 1, n, 'right'), riemann(f, 0, 1, n, 'mid')
    print(f"n={n:>6}  左={L:.8f}  右={R:.8f}  中點={M:.8f}  誤差(中點)={abs(M-exact):.2e}")

觀察重點:

  1. \(n \to \infty\) 時三種近似都收斂到 \(\frac{1}{3}\) ——這就是「積分是極限」的具體樣貌。
  2. 左和永遠低估、右和永遠高估(因為 \(x^2\) 遞增);真值夾在中間。
  3. 中點法收斂快得多:誤差約與 \(n^2\) 成反比, \(n\) 放大 10 倍誤差縮小 100 倍。

再對照符號積分的精確答案:

from sympy import Rational
integrate(x**2, (x, 0, 1))   # 1/3 —— 與 n→∞ 的極限一致

廣義積分:與 \(\infty\) 過招#

積分範圍可以延伸到無窮,SymPy 用 oo 表示 \(\infty\) :

from sympy import oo

integrate(1/x**2, (x, 1, oo))      # 1(收斂!尾巴面積有限)
integrate(1/x, (x, 1, oo))         # oo(發散)
integrate(exp(-x), (x, 0, oo))     # 1

\(\frac{1}{x^2}\) 在無窮遠處衰減得夠快所以收斂, \(\frac{1}{x}\) 衰減太慢所以發散——「 \(p\) 積分」的分水嶺。經典的高斯積分也一樣能精確求解:

integrate(exp(-x**2), (x, -oo, oo))   # sqrt(pi)

部分分式積分:連結 2.2 的 apart#

有理函數積分的標準策略:先用 apart(2.2 節)做部分分式分解,再逐項積分。

\[ \frac{1}{x^2 - 1} = \frac{1}{2}\left( \frac{1}{x-1} - \frac{1}{x+1} \right) \]
apart(1/(x**2 - 1), x)
# 1/(2*(x - 1)) - 1/(2*(x + 1))

integrate(1/(x**2 - 1), x)
# log(x - 1)/2 - log(x + 1)/2

可以看到 SymPy 的答案就是「分解後逐項積分」的結果。手算時先 apart 看清楚結構,是好習慣。

動手實驗:驗證微積分基本定理(FTC)#

FTC 是整個微積分的橋樑:

\[ \int_a^b f(x)\,dx = F(b) - F(a), \quad \text{其中 } F' = f \]

實驗一:符號驗證。隨機挑幾個函數,確認「先積分再代入上下限相減」與直接定積分一致:

from sympy import simplify

tests = [x**3, sin(x), exp(x), x*sympy.cos(x)]
for f in tests:
    F = integrate(f, x)
    by_ftc = simplify(F.subs(x, 2) - F.subs(x, 0))
    direct = integrate(f, (x, 0, 2))
    print(f"{f}: FTC={by_ftc}, 直接={direct}, 相等? {simplify(by_ftc - direct) == 0}")

實驗二:驗證「變上限積分的導數還原回被積函數」:

\[ \frac{d}{dx} \int_a^x f(t)\,dt = f(x) \]
t = symbols('t')
F_up = integrate(sin(t), (t, 0, x))   # 1 - cos(x)
diff(F_up, x)                          # sin(x) ← 還原了!

實驗三:數值對照。用 Riemann 和近似 \(\int_0^2 \sin x\,dx\) ,與符號答案 \(1 - \cos 2\) 比對:

exact = float(integrate(sin(x), (x, 0, 2)))   # 1.4161...
for n in [10, 100, 1000]:
    approx = riemann(np.sin, 0, 2, n, 'mid')
    print(f"n={n:>5}  近似={approx:.8f}  誤差={abs(approx-exact):.2e}")

數值極限收斂到符號精確值——微積分「連續」與「離散」兩個世界的會師。

小結與練習#

  • 不定積分求反導數(記得 \(+C\) );定積分是有號面積。
  • integrate(expr, x) 與 integrate(expr, (x, a, b)) 兩種呼叫形式。
  • \(e^{-x^2}\) 、 \(\frac{\sin x}{x}\) 等沒有初等反導數,需靠特殊函數、數值方法或級數。
  • 廣義積分用 oo;有理函數先 apart 再積分;Riemann 和是定積分的定義。

練習

  1. 計算 \(\int_0^{\pi/2} \sin^2 x\, dx\) ,並用 Riemann 和驗證。
  2. 判斷 \(\int_1^\infty \frac{1}{x^{1.5}}\, dx\) 是否收斂;若收斂求其值。
  3. 用 apart 分解 \(\frac{3x + 5}{x^2 + 2x + 1}\) ,再手動逐項積分,與 integrate 對照。
  4. 對 \(f(x) = e^{-x^2}\) 畫出 \(\int_0^x e^{-t^2} dt\) 的圖形(變上限積分),觀察它遞增且漸趨水平。