# 收尾 · 一张图串起全篇

> 七站走完，回头看。这一章不讲新知识，而是把整条专栏的主线——表达式是树、计算即重写、精确的力量与代价、一道道「不可能」的墙，以及符号与数值的互补——收拢成一张全景图和一套世界观，并回到那个最深的命题：计算，就是符号变换。

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

# 收尾 · 一张图串起全篇

从 $\sqrt8\to2\sqrt2$ 出发，我们走了七站。这一章不添新东西，只做一件事：**把一路上反复出现的主线拎出来**，让它们从「一堆功能」凝成「一套看待符号计算、乃至看待『计算』本身的世界观」。

## 七站全景

```mermaid
flowchart TD
    A["① 地基<br/>表达式树 · 精确数 · 化简边界"] --> B["② 内核<br/>替换匹配 · 计算即重写"]
    B --> C["③ 代数引擎<br/>多项式 · 因式分解 · Gröbner"]
    B --> D["④ 微积分符号版<br/>求导 · 积分 · 极限 · ODE"]
    C --> E["⑤ 精确求解<br/>解方程 · 符号线代"]
    D --> E
    E --> F["⑥ 工具与陷阱<br/>CAS 全景 · 膨胀 · 符号 vs 数值"]
    G["贯穿全程的本质<br/>计算 = 按规则重写符号"] -.支撑.- B
```

## 主线一：表达式是树，计算是重写

<Callout type="info">
  **整个专栏，地基是两句话。** 第一句：**任何数学表达式，本质都是一棵[树](https://daiw.org/manual/symbolic-computing/expression-tree)**——内部节点是运算、叶子是符号与数，统一遵循「`.func` + `.args`」的递归结构。第二句：**符号计算的一切，都是[按规则把一棵树重写成另一棵树](https://daiw.org/manual/symbolic-computing/term-rewriting)**——[求导](https://daiw.org/manual/symbolic-computing/symbolic-diff)是五条规则、[化简](https://daiw.org/manual/symbolic-computing/auto-simplification)是一批规则、[解 ODE](https://daiw.org/manual/symbolic-computing/symbolic-ode) 是「分类 + 套方法」，拆开全是[模式匹配 + 替换](https://daiw.org/manual/symbolic-computing/substitution-matching)。

  抓住这两句，你就看穿了从 SymPy 到 Mathematica 所有 CAS 的灵魂：**它们是在操作树、重写符号。** 剩下的都是细节。
</Callout>

## 主线二：精确——它的力量，与它的代价

符号计算区别于[数值](https://daiw.org/manual/numerical-computing)的根本，是**精确**。这份精确是一体两面的：

| | 精确带来的**力量** | 精确付出的**代价** |
| --- | --- | --- |
| 数 | [$\frac13$、$\sqrt2$、$50!$ 一位不差](https://daiw.org/manual/symbolic-computing/exact-numbers) | 有理数 / 大整数越滚越大 |
| 结果 | 给**公式**、给**精确解** | [表达式膨胀](https://daiw.org/manual/symbolic-computing/expression-swell)（$n!$ 项） |
| 能力 | 能做代数、能**证明** | 慢、内存不可预测 |

**精确 ⟺ 保留全部信息 ⟺ 可能无限膨胀。** 数值用「可控的误差」换「可控的规模」，符号用「爆炸的规模」换「零误差」。理解这笔交易，是用好符号计算的前提——**没有免费的午餐，[膨胀是精确开出的账单](https://daiw.org/manual/symbolic-computing/expression-swell)。**

## 主线三：一道道墙，与诚实的符号

这可能是全专栏最优美的一条暗线：**符号计算一次次撞上「不可能」的墙，而每一次，它都诚实地面对，并用一个新符号精确承载那份「无法」。**

| 墙（被证明的不可能） | 出现在 | 系统的诚实回应 |
| --- | --- | --- |
| [零判定不可判定（Richardson）](https://daiw.org/manual/symbolic-computing/auto-simplification) | 化简 | `simplify` 只能是启发式，不保证最简 |
| [某些函数无初等原函数（Liouville）](https://daiw.org/manual/symbolic-computing/symbolic-integration) | 积分 | 造 `erf`、`Si`；实在不行返回未求值的 `Integral` |
| [五次以上无根式解（Abel-Ruffini）](https://daiw.org/manual/symbolic-computing/equation-solving) | 解方程 | 用 `CRootOf`（第 k 个根）精确表示 |

<Callout type="info">
  **注意这三堵墙的共同姿态：计算机不是「算不出来就报错」，而是[像当年数学家造 $\sqrt2$、造 $i$ 一样，造一个新符号](https://daiw.org/manual/symbolic-computing/equation-solving)，精确地承载那个「写不出来」的对象。** `erf` 承载「积不出的高斯积分」，`CRootOf` 承载「写不成根式的根」。符号计算因此有一种罕见的**诚实**：它清楚自己能力的边界在哪（而且这些边界是被**数学证明**的），并在边界上依然给出**精确**的答案。这份「知道自己不知道、且不知道处仍然精确」的品格，是它最动人的地方。
</Callout>

## 主线四：主流方法，一张清单

这一路认识的业内主流符号方法，收拢成一张随身清单：

- **多项式引擎**：[展开 / 合并 / 除法](https://daiw.org/manual/symbolic-computing/polynomials)、[欧几里得 GCD、因式分解](https://daiw.org/manual/symbolic-computing/factor-gcd)——一切代数的地基。
- **[Gröbner 基](https://daiw.org/manual/symbolic-computing/groebner)**（Buchberger 算法）：多项式方程组的「高斯消元」，计算机代数的明珠。
- **[符号微积分](https://daiw.org/manual/symbolic-computing/symbolic-diff)**：求导（机械规则）、积分（[Risch 判定](https://daiw.org/manual/symbolic-computing/symbolic-integration)）、[极限（Gruntz）与级数](https://daiw.org/manual/symbolic-computing/limits-series)、[ODE（分类求解）](https://daiw.org/manual/symbolic-computing/symbolic-ode)。
- **[精确求解](https://daiw.org/manual/symbolic-computing/equation-solving)**：`solve`（根式 + `CRootOf`）、[符号线性代数](https://daiw.org/manual/symbolic-computing/symbolic-linalg)（精确行列式 / 逆 / 特征值）。

它们各有一段深刻的理论（欧几里得、Buchberger、Risch、Galois、Gruntz），但**内核都是[对树的规则重写](https://daiw.org/manual/symbolic-computing/term-rewriting)**。

## 主线五：符号与数值，一枚硬币的两面

<Callout type="info">
  **符号和[数值](https://daiw.org/manual/numerical-computing)不是对手，是互补。** 符号「[对与懂](https://daiw.org/manual/symbolic-computing/symbolic-vs-numeric)」（精确、给公式、看清结构），数值「快与大」（高效、可扩展）。要公式 / 精确 / 小规模就符号，要速度 / 大规模 / 无闭式就数值。而最高明的，是用 **[`lambdify`](https://daiw.org/manual/symbolic-computing/symbolic-vs-numeric) 让它们合体**——先符号推导出正确的公式，再编译成 NumPy 函数飞速求值。**先符号、后数值**，是科学计算行家的默认套路。

  这也是本专栏与[《数值计算的艺术》](https://daiw.org/manual/numerical-computing)合起来想说的：**没有绝对最好的方法，只有适合当前世界的方法。** 同一个「用特征多项式求特征值」，[数值上是禁忌、符号上是正道](https://daiw.org/manual/symbolic-computing/symbolic-linalg)——差别不在算法，在你脚下是「近似」还是「精确」。
</Callout>

## 结语：计算，就是符号变换

最后，回到这个专栏最想让你带走的东西。我们从「让计算机推公式」这个朴素愿望出发，一层层剥下去，最终触到的，是一个关于「计算」本身的洞察：

> **符号计算不是「模拟数学家」的花招。它揭开的，是「计算」最古老、最本质的一副面孔——[按规则把符号一步步重写](https://daiw.org/manual/symbolic-computing/term-rewriting)。** [λ 演算](https://daiw.org/manual/symbolic-computing/term-rewriting)（β-归约）、Lisp（重写 S-表达式）、Mathematica（整门语言即重写）、逻辑推理（推理规则即重写规则），这些看似天各一方的东西，底下是同一句话：**计算，就是符号的变换。**

数值计算把世界近似成浮点去逼近；符号计算，连同它背后的 λ 演算与数理逻辑，揭开的是更深的一层——**人类思维里「推导」这个动作，本身就是机械的符号变换。** 当你看着 SymPy 求出一个精确积分、看着它诚实地说「这个积不出来」，你看到的，其实是「计算」与「逻辑」最本真的样子。

《符号计算的艺术》到此完结。愿你从此看待任何一个公式，都会想起：**它是一棵树；而算它，就是重写它。**

## 参考文献

- [1] Joel S. Cohen.《Computer Algebra and Symbolic Computation》—— 表达式、重写与算法的完整脉络。
- [2] Baader & Nipkow.《Term Rewriting and All That》—— 「计算即重写」的理论根基。
- [3] Cox, Little & O'Shea.《Ideals, Varieties, and Algorithms》—— 代数引擎(Gröbner)的最佳入门。
- [4] 姊妹篇《[数值计算的艺术](https://daiw.org/manual/numerical-computing)》—— 精确的另一面：近似的世界。
