# 符号积分 · 为什么难得多

> 求导是机械的，积分却是一门「艺术」——没有万能规则，有些函数（比如 e^（-x²））根本没有初等原函数，而计算机能证明这一点。这一章讲清这个惊人的不对称、特殊函数从哪来，以及背后那套优雅的判定理论：Risch 算法与 Liouville 定理。

- 作者：David（道雾轩）
- 专栏：符号计算的艺术（https://daiw.org/manual/symbolic-computing.md）
- 最后更新：2026-07-14
- 原文：https://daiw.org/manual/symbolic-computing/symbolic-integration
- 转载与引用：请注明出处并附原文链接（https://daiw.org/about/copyright）

# 符号积分 · 为什么难得多

上一章的[符号微分](https://daiw.org/manual/symbolic-computing/symbolic-diff)顺得像滑梯：套规则，总能算，还精确。这一章我们撞上它的反面。**积分是微积分符号版里最难、也最深刻的一块**——难到有些函数根本积不出来，而计算机居然能**证明**它积不出来。

## 先看它能做的

`integrate` 处理常规积分依然漂亮：

```python
from sympy import *
x = symbols('x')

print(integrate(1/(x**2 - 1), x))    # log(x - 1)/2 - log(x + 1)/2
print(integrate(x*exp(x), x))         # (x - 1)*exp(x)      —— 分部积分
print(integrate(exp(-x**2), (x, -oo, oo)))   # sqrt(pi)     —— 精确的定积分!
```

尤其最后那个——高斯积分 $\int_{-\infty}^{\infty}e^{-x^2}dx=\sqrt\pi$，一个**精确**的结果。看起来积分也不过如此？别急。

## 求导与积分：刺眼的不对称

同样是微积分的基本操作，求导和积分的「性格」却天差地别：

<Callout type="info">
  **求导是机械的，积分是「艺术」。**
  - **求导**：规则有限、确定，套下去**一定**得到答案。[上一章](https://daiw.org/manual/symbolic-computing/symbolic-diff)见过了。
  - **积分**：**没有**一套「照着做就行」的万能规则。分部、换元、部分分式…… 每种技巧只对某些形式管用，选哪种、怎么凑，像解谜。更糟的是——**有些初等函数，压根没有初等原函数。**

  这个不对称的根源在于：求导让函数变「简单」（次数降低、结构变规整），积分却常让函数变「复杂」，甚至**跳出初等函数的世界**。手算积分之所以比求导难得多，不是你的错——是问题本身就难。
</Callout>

## 惊人之处：有的函数「积不出来」

看这个著名的例子——对 $e^{-x^2}$（高斯函数，统计学的心脏）求**不定**积分：

```python
print(integrate(exp(-x**2), x))       # sqrt(pi)*erf(x)/2
print(integrate(sin(x)/x, x))         # Si(x)
```

SymPy 没有给出 $\sin$、$\cos$、$\exp$、$\log$ 这些**初等函数**组成的答案，而是冒出个 `erf`、`Si`。这是什么？

<Callout type="warn">
  **`erf`（误差函数）、`Si`（正弦积分）是「特殊函数」——它们的存在，恰恰是因为 $e^{-x^2}$、$\frac{\sin x}{x}$ 没有初等原函数。** 这不是 SymPy 偷懒或不够聪明。**数学上已经证明：$e^{-x^2}$ 的原函数，无法用有限个初等函数（多项式、根式、指数、对数、三角）表达出来。** 既然写不出来，数学家干脆**给这个积分起个名字**——把 $\frac{2}{\sqrt\pi}\int_0^x e^{-t^2}dt$ 定义成 `erf(x)`。所以 SymPy 返回 `erf`，是在诚实地说：「**它没有初等答案，喏，这是用为它专门定义的特殊函数写的结果。**」

  换句话说，`erf` 之于积分，就像 $\sqrt2$ 之于「$x^2=2$ 的解」——当已有的符号不够用，就**造一个新符号**精确地承载它。特殊函数，是符号世界对「积不出来」的优雅回应。
</Callout>

如果连特殊函数都凑不出，SymPy 会**诚实地把积分原样返回**，表示「我确实做不到」：

```python
print(integrate(sin(sin(x)), x))      # Integral(sin(sin(x)), x)  —— 未求值,如实相告
```

## 背后的理论：Risch 算法与 Liouville 定理

「计算机怎么**知道** $e^{-x^2}$ 积不出来？」——这是本章最深的问题，答案是符号计算最优美的成就之一：

<Callout type="info">
  **符号积分的核心是 Risch 算法（1969）——一个「判定算法」。** 给定一个初等函数，Risch 算法能**判定**它的积分**是否**是初等函数：是，就把它算出来；不是，就**确定地回答「不存在初等原函数」**。这不是「试了很多方法都没成功」的猜测，而是**数学上确定的判决**。

  它的理论根基是 **Liouville 定理**：它精确刻画了「一个初等函数的原函数在什么条件下仍是初等的」。Risch 算法把这个定理**变成了可执行的判定过程**——用的工具是**微分代数**（把「求导」抽象成代数结构上的运算，在其中做判定）。这就是计算机能「证明某函数积不出来」的底气：它不是没找到，而是**证明了不存在**。

  （实话：完整的 Risch 算法极其复杂，真实 CAS 里是「Risch 主干 + 一大堆启发式与模式匹配」的混合体。但那个「可判定」的理论内核，是符号积分和符号微分**最本质的分野**。）
</Callout>

## 定积分：另有乾坤

有意思的是，即便**不定**积分没有初等形式，**定**积分却可能有漂亮的闭式——像 $\int_{-\infty}^\infty e^{-x^2}dx=\sqrt\pi$。这是因为定积分能借助对称性、留数、特殊函数的已知取值等**额外武器**。SymPy 对定积分还有一套 **Meijer G-函数**方法，能算出大量教科书里的经典定积分。**「不定积不出、定积却算得漂亮」，是符号积分常见又迷人的一幕。**

## 小结与下一章

**符号积分远难于[求导](https://daiw.org/manual/symbolic-computing/symbolic-diff)**：没有万能规则，且**有些初等函数没有初等原函数**（$e^{-x^2}\to$ `erf`、$\frac{\sin x}{x}\to$ `Si`，特殊函数正是为承载它们而生；实在不行就如实返回未求值的 `Integral`）。计算机能**证明**某函数积不出来，靠的是 **Risch 判定算法**与 **Liouville 定理**（微分代数）。定积分另有对称性 / 特殊函数等武器，常有闭式。

积分讲的是「求原函数」。还有两类和「无穷逼近」有关的符号操作——**极限**与**级数展开**，它们是分析学的符号化身，也支撑着近似与渐近分析。下一章一起看。👉 [极限与级数](https://daiw.org/manual/symbolic-computing/limits-series)。

## 参考文献

- [1] Robert Risch.「The Problem of Integration in Finite Terms.」*Trans. AMS*, 1969. —— Risch 算法原始论文。
- [2] Manuel Bronstein.《Symbolic Integration I: Transcendental Functions》—— 符号积分权威专著。
- [3] SymPy 文档.「Integrals; the risch algorithm.」https://docs.sympy.org/latest/modules/integrals/integrals.html
