翻译自英文原版 maths-cs-ai-compendium,共 20 章全部完成。 第01章 向量 | 第02章 矩阵 | 第03章 微积分 第04章 统计学 | 第05章 概率论 | 第06章 机器学习 第07章 计算语言学 | 第08章 计算机视觉 | 第09章 音频与语音 第10章 多模态学习 | 第11章 自主系统 | 第12章 图神经网络 第13章 计算与操作系统 | 第14章 数据结构与算法 第15章 生产级软件工程 | 第16章 SIMD与GPU编程 第17章 AI推理 | 第18章 ML系统设计 第19章 应用人工智能 | 第20章 前沿人工智能 翻译说明: - 所有数学公式 $...$ / $$...$$、代码块、图片引用完整保留 - mkdocs.yml 配置中文导航 + language: zh - README.md 已翻译为中文(兼 docs/index.md) - docs/ 目录包含指向各章文件的 symlink - 约 29,000 行中文内容,排除 .cache/ 构建缓存
5.7 KiB
积分学
积分学在区间上累积量,将局部变化率还原为总量。本文涵盖定积分与不定积分、微积分基本定理、积分技巧,以及在机器学习中与概率密度和期望值的应用。
-
微分告诉我们单个点的变化率。积分则相反:它将许多微小片段累积起来,计算出一个总量。
-
如果导数回答的是"多快?",那么积分回答的是"多少?"
-
理解积分最简单的方式是将其视为曲线下的面积。如果绘制出函数
f(x)的图像,并将从x = a到x = 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)的一个原函数,那么定积分等于F在端点处的值之差:
\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 trig)、代数函数(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)
- 使用黎曼和,用不断增加数量的矩形来数值逼近 $\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} approx: {area:.6f} exact: {1/3:.6f}")
- 数值验证微积分基本定理。定义 $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}")
- 可视化
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"Area = {jnp.sum(jnp.sin(x) * (jnp.pi / 500)):.4f} (exact: 2.0)")
plt.show()