符号计算的艺术

让计算机像人一样「推公式」——不是算出 1.414,而是保留 √2 本身。这个专栏从「表达式是一棵树、计算是按规则重写这棵树」讲起,用 SymPy 代码优先,一路走过精确数、多项式、Gröbner 基、符号积分、方程精确解,详解业内主流的计算机代数方法,并揭示一个朴素而深刻的本质:计算,就是符号变换。

作者 David更新于

序 · 让计算机像人一样推公式

问计算机 8\sqrt{8} 等于多少,你期待什么答案?

from sympy import *
print(sqrt(8))        # 2*sqrt(2)   —— 不是 2.8284271……

它没有算出小数,而是回答 222\sqrt{2}——就像一个学生在草稿纸上做的那样,保留精确的符号。再往前一步,让它做一道积分:

x = symbols('x')
print(integrate(1/(x**2 - 1), x))    # log(x - 1)/2 - log(x + 1)/2

它给出的不是一个数,而是一个精确的公式。这台机器,正在像人一样推导数学。这就是符号计算(symbolic computation),又叫计算机代数(computer algebra)——本专栏的主角。

和「数值计算」正好相反

这个专栏是《数值计算的艺术》的孪生兄弟,而它们的世界观恰好相反:

数值计算符号计算
处理的对象近似的浮点数精确的表达式
2\sqrt{2} 是1.41421356232\sqrt{2}(原样保留)
13+16\frac13+\frac16 是0.5000000001(可能)12\frac12(精确)
追求快、可扩展、够准准确无误、给出公式
像谁拿计算器按数拿笔推公式的数学家
代表工具NumPy / SciPySymPy / Mathematica

数值计算里那个著名的坑——0.1 + 0.2 != 0.3——在符号计算里根本不存在:

print(Rational(1,10) + Rational(2,10) == Rational(3,10))   # True,精确相等

因为符号计算不用浮点数,它用精确的有理数 310\frac{3}{10}。没有舍入,没有误差,答案要么对、要么是一个精确的公式。

这个专栏的主线:表达式是树,计算是重写

符号计算看似神奇,内核却出奇地朴素。整个专栏,我们会反复回到两句话:

第一句:一切数学表达式,本质都是一棵树。 x2+2x+1x^2 + 2x + 1 在计算机里不是一串字符,而是一个结构化的树:一个「加法」节点,挂着「x2x^2」「2x2x」「11」三个孩子。符号计算做的一切,都是在操作这棵树。

第二句:计算,就是按规则把一棵树重写成另一棵树。 求导、化简、积分、解方程……剥开外壳,全都是模式匹配 + 替换:在树里找到符合某条规则的部分,把它换成规则右边的样子。这个朴素的动作——按规则重写符号——不仅是符号计算的内核,更是「计算」这个概念最古老、最本质的一副面孔。它和数理逻辑、λ 演算、Lisp 求值,是同一件事。

把这两句话吃透,你就抓住了从 SymPy 到 Mathematica 所有计算机代数系统(CAS)的灵魂。

方法:代码优先,SymPy 贯穿全篇

和孪生专栏一样,我们代码优先——每个概念都配一段能立即跑的 SymPy 代码(Python 的计算机代数库,pip install sympy 即得),左边是符号操作、右边用人话讲清它在干什么。选 SymPy 是因为它纯 Python、免费、随手可跑;涉及主流方法时,我们也会对照 Mathematica、Maple、Maxima、SageMath 这些业内工具的做法。

学完你会明白这些每天在科学与工程里发生的事是怎么实现的:

  • 为什么符号求导总能算、还精确,而符号积分难得多、有些甚至根本没有初等答案(而且计算机能证明这一点)?
  • Gröbner 基——多元方程组的「高斯消元」——凭什么被称作计算机代数的明珠?
  • 为什么五次以上的方程没有求根公式,而计算机代数系统「知道」这件事?
  • 符号计算的阿喀琉斯之踵——表达式膨胀——是什么,为什么它不能取代数值计算?

路线图:七站

  1. 地基 · 一切都是表达式树 —— 表达式即树、精确数(有理数/大整数/根式)、自动化简的边界。
  2. 内核 · 符号即规则重写 —— 替换与模式匹配、计算即重写(本质篇)。
  3. 代数引擎 · 主流方法 —— 多项式、因式分解与 GCD、Gröbner 基。
  4. 微积分的符号版 —— 符号求导、符号积分、极限与级数、符号解 ODE。
  5. 精确求解 —— 解方程、符号线性代数。
  6. 工具、生态与陷阱 —— 主流 CAS 全景、表达式膨胀、符号 vs 数值。
  7. 收尾 —— 一张图串起全篇。

准备好了吗?我们从最基础、也最重要的一个洞察开始:你眼里的公式,在计算机眼里是一棵树。 👉 表达式即树。

本页目录