Files
flykhan 2536c937e3 feat: 完整中文翻译 maths-cs-ai-compendium(数学·计算机科学·AI 知识大全)
翻译自英文原版 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/ 构建缓存
2026-05-03 10:23:20 +08:00

111 lines
5.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 积分学
*积分学在区间上累积量,将局部变化率还原为总量。本文涵盖定积分与不定积分、微积分基本定理、积分技巧,以及在机器学习中与概率密度和期望值的应用。*
- 微分告诉我们单个点的变化率。积分则相反:它将许多微小片段累积起来,计算出一个总量。
- 如果导数回答的是"多快?",那么积分回答的是"多少?"
- 理解积分最简单的方式是将其视为**曲线下的面积**。如果绘制出函数 $f(x)$ 的图像,并将从 $x = a$ 到 $x = b$ 之间曲线与 x 轴之间的区域涂上阴影,积分给出的就是该区域的有符号面积。
![积分通过求和薄矩形来计算曲线下的面积](../images/area_under_curve.svg)
- 为什么是"有符号"的?在 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
1. 使用黎曼和,用不断增加数量的矩形来数值逼近 $\int_0^1 x^2\, dx$。与精确答案 $\frac{1}{3}$ 进行比较。
```python
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}")
```
2. 数值验证微积分基本定理。定义 $F(x) = \int_0^x t^2\, dt = \frac{x^3}{3}$,并验证其导数(通过 `jax.grad` 计算)等于 $x^2$。
```python
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` 填充该区域,并用黎曼和数值计算面积。
```python
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()
```