Skip to content

积分学

积分学将量在区间上累积起来,把局部的变化率变回总量。本章涵盖定积分与不定积分、微积分基本定理、积分技巧,以及在机器学习中概率密度与期望值的应用。

  • 微分告诉我们某一点的瞬时变化率。积分则反过来:它将无数微小部分累加起来,计算出总量。

  • 如果说导数回答的是“变化有多快?”,那么积分回答的就是“总量是多少?”

  • 理解积分最简单的方式是把它看作曲线下的面积。当你绘制函数 \(f(x)\) 的图形,并沿着 \(x\) 轴从 \(a\)\(b\) 把曲线与 \(x\) 轴之间的区域涂上阴影时,积分给出的就是这个区域的有符号面积。

积分通过求和细长矩形来计算曲线下的面积

  • 为什么是“有符号”?在 \(x\) 轴上方的区域贡献正面积,下方的区域贡献负面积。这符合物理直觉:如果 \(f(x)\) 表示速度,那么积分给出的是净位移(前进减去后退),而不是总路程。

  • 要计算这个面积,可以想象把区域切成 \(n\) 个很窄的竖直矩形,每个矩形的宽度为 \(\Delta x\)。矩形的高度取为切片内某一点的函数值。将它们求和:

\[\text{面积} \approx \sum_{i=1}^{n} f(x_i^\ast) \, \Delta x\]
  • 当矩形越来越细(\(n \to \infty\)\(\Delta x \to 0\))时,这个和就变得精确。这个极限过程定义了定积分
\[\int_a^b f(x)\, dx = \lim_{n \to \infty} \sum_{i=1}^{n} f(x_i^\ast) \, \Delta x\]
  • \(\int\) 符号是拉长的字母“S”,代表“求和”(Sum)。\(dx\) 提醒我们,我们正在沿着 \(x\) 轴对无穷薄的切片求和。

  • 不定积分(或原函数)是一个函数 \(F(x)\),其导数为 \(f(x)\)。我们写作:

\[\int f(x)\, dx = F(x) + C\]
  • \(+ C\)积分常数。因为任意常数的导数为零,所以存在无穷多个原函数,它们之间仅相差一个常数。例如,\(\int 2x\, dx = x^2 + C\),因为 \(x^2 + 7\)\(x^2 - 3\) 的导数仍然是 \(2x\)

  • 微积分基本定理是连接微分与积分的桥梁。它包含两部分:

  • 第一部分:如果 \(F(x)\)\(f(x)\) 的一个原函数,那么定积分等于原函数在端点处的差值:

\[\int_a^b f(x)\, dx = F(b) - F(a)\]
  • 这个公式非常实用。我们不再需要计算复杂的极限和(那很困难),而是找到一个原函数,然后在两点处求值(通常很容易)。

  • 第二部分:如果定义 \(F(x) = \int_a^x f(t)\, dt\),那么 \(F'(x) = f(x)\)。微分与积分互为逆运算,它们互相抵消。

  • 例如,计算 \(\int_1^3 x^2\, dx\)\(x^2\) 的一个原函数是 \(\frac{x^3}{3}\)。所以 \(\int_1^3 x^2\, dx = \frac{27}{3} - \frac{1}{3} = \frac{26}{3} \approx 8.67\)

  • 正如微分有规则一样,积分也有对应的逆运算规则:

函数 积分 条件
\(x^n\) \(\frac{x^{n+1}}{n+1} + C\) \(n \neq -1\)
\(\frac{1}{x}\) \(\ln\|x\| + C\)
\(e^x\) \(e^x + C\)
\(a^x\) \(\frac{a^x}{\ln a} + C\)
\(\sin x\) \(-\cos x + C\)
\(\cos x\) \(\sin x + C\)
\(k\)(常数) \(kx + C\)
  • 和/差规则同样适用:\(\int [f(x) \pm g(x)]\, dx = \int f(x)\, dx \pm \int g(x)\, dx\)。常数可以提取出来:\(\int k\, f(x)\, dx = k \int f(x)\, dx\)

  • 当一个函数直接积分较复杂时,我们有技巧可以简化它。

  • u-代换是链式法则的逆运算。如果你发现被积函数形如 \(f(g(x))\) 乘以 \(g'(x)\),就可以令 \(u = g(x)\),则 \(du = g'(x)\, dx\),积分就会简化。

  • 例如:\(\int 2x \cos(x^2)\, dx\)。令 \(u = x^2\),则 \(du = 2x\, dx\)。积分变为 \(\int \cos(u)\, du = \sin(u) + C = \sin(x^2) + C\)

  • 分部积分是乘积法则的逆运算。如果被积函数是两个函数的乘积:

\[\int u\, dv = uv - \int v\, du\]
  • 策略性地选择 \(u\)\(dv\),使得剩下的积分 \(\int v\, du\) 比原积分更简单。选择 \(u\) 的口诀是LIATE:对数函数(Logarithmic)、反三角函数(Inverse trigonometric)、代数函数(Algebraic)、三角函数(Trigonometric)、指数函数(Exponential),优先从左边的类别中选取 \(u\)

  • 例如:\(\int x\, e^x\, dx\)。令 \(u = x\)(代数函数),\(dv = e^x\, dx\)。则 \(du = dx\)\(v = e^x\)。于是:\(\int x\, e^x\, dx = x\, e^x - \int e^x\, dx = x\, e^x - e^x + C = e^x(x - 1) + C\)

  • 在机器学习中,积分出现在概率论中(通过对密度函数积分计算概率)、期望值(连续分布上的加权平均)以及计算 ROC 曲线下的面积。虽然实践中我们很少手工积分,但理解积分的含义有助于解读这些量。

编程任务(使用 CoLab 或 notebook)

  1. 使用黎曼和数值逼近 \(\int_0^1 x^2\, dx\),逐渐增加矩形数量,并与精确答案 \(\frac{1}{3}\) 比较。

    import jax.numpy as jnp
    
    for n in [10, 100, 1000, 10000]:
        x = jnp.linspace(0, 1, n, endpoint=False)
        dx = 1.0 / n
        area = jnp.sum(x**2 * dx)
        print(f"n={n:5d}  近似值: {area:.6f}  精确值: {1/3:.6f}")
    

  2. 数值验证微积分基本定理。定义 \(F(x) = \int_0^x t^2\, dt = \frac{x^3}{3}\),并检查它的导数(用 jax.grad 计算)是否等于 \(x^2\)

    import jax
    import jax.numpy as jnp
    
    F = lambda x: x**3 / 3
    dF = jax.grad(F)
    
    for x in [0.5, 1.0, 2.0, 3.0]:
        print(f"x={x:.1f}  F'(x)={dF(x):.4f}  x^2={x**2:.4f}")
    

  3. 可视化 \(f(x) = \sin(x)\)\(0\)\(\pi\) 下的面积。用 plt.fill_between 填充区域,并用黎曼和数值计算面积。

    import jax.numpy as jnp
    import matplotlib.pyplot as plt
    
    x = jnp.linspace(0, jnp.pi, 500)
    y = jnp.sin(x)
    
    plt.plot(x, y, color="purple", linewidth=2)
    plt.fill_between(x, y, alpha=0.2, color="purple")
    plt.title(f"面积 = {jnp.sum(jnp.sin(x) * (jnp.pi / 500)):.4f}  (精确值: 2.0)")
    plt.show()