arXiv · 2018 / 2024 重发 · Annotated visualization
一百年没动过的教法,给学生留了一笔「代码债」:同一件事被拆成了许多不同的流程。Jonathan Bartlett 在这篇 arXiv 论文里提议 —— 把微分换成主角,把极限放到最后,把整门课压成一条路。
显函数 / 隐函数 / 多元 / 高阶导数 / 链式 / 商式 —— 每种都有自己的「规矩」。学生记的不是方法,是几十种流程。
用 d() 代替 d/dx —— 它对 x、y 一视同仁,把隐函数和显函数的「规矩」压成同一条。把极限挪到课程结尾。
同一套流程跑遍显函数 / 隐函数 / 多元 / 高阶。学生练一次,几十种情况都通了。
§ 01 · 诊断
程序员有一句老话:code debt。新功能不断塞进去,旧的代码不重写, 就出现「同一件事有好几种写法」。今天的大一微积分,就是这样。
if 显函数 y = f(x): 套 $\frac{\mathrm{d}}{\mathrm{d}x}(\cdot)$ 公式 elif 隐函数 xy = 5: 两边求导, y 单独处理 elif 多元 f(x, y, z):三个偏导 ∂/∂x ∂/∂y ∂/∂z elif 链式 f(g(x)): 复合求导, 链式法则 elif 商式 u/v: 单独的商法则 elif 反函数: 1 / f'(y), 单独记 else: 用极限 lim 硬推
def diff(expr): # 一个微分算子 d(), 对每个变量一视同仁 return 乘积律 + 链式律 def derivative(eq, with_respect_to): # 第二步: 用普通代数解出 dy/dx return solve(diff(eq), dy/dx)
重构的关键不是发明新东西,是识别:哪些是核心,哪些只是变形。 Bartlett 的答案 —— 微分 d() 是核心,导数 d/dx 只是它的一种比例。
§ 02 · 顺序
几乎所有学科,学生都在直觉之后才遇到证明。孩子先会说话, 再学语法;先会算 3+2,再学加法交换律。微积分不该例外。
Bartlett 自己把极限挪到了课程最后。 极限的定义回到「图上的洞」 —— 而不是「代数表达式的精细写法」。
§ 03 · 斜率
在严格的 ε-δ 之前,学生其实可以靠一个 h 参数, 用最普通的代数把「单点斜率」逼出来。
当 $h \to 0$ 时, $m \to 2x$。这就是 $y = x^2$ 在 $x$ 处的导数。
把 h 算出来之后,「当 h → 0」 就只是代入 h = 0 —— 给出 2x。
h 不是零, 但够近到可以当零用
§ 04 · 两个算子
导数 $\frac{\mathrm{d}}{\mathrm{d}x}$ 必须选一个「自变量」;微分 d() 不挑。 对隐函数 xy = 5 —— 乘积律应该对称,结果 d/dx 让 y 显得很特殊。
求 dy/dx 时 y 不是数字,要换成 dy/dx;求 dx/dy 时反过来又换一次。 乘积律不再对称,学生被告知「记住这一条规则」。
想要 dy/dx?把等式代数求解就行。所有导数都变成两步: 先微分,再除一下。
这本来就是Leibniz 当年的做法(Bos 1974)—— 原文里 $\mathrm{d}(\cdot)$ 是主角,$\frac{\mathrm{d}y}{\mathrm{d}x}$ 是后来才被人凑出来的比例。
§ 05 · 代数
19 世纪严格派说不行 —— 「无穷小是鬼魂」。 1974 年 Abraham Robinson 用超实数(hyperreals) 把这套操作重新严格化了。从此 $\mathrm{d}(uv) = u\,\mathrm{d}v + v\,\mathrm{d}u$ 可以像乘法分配律那样直接用。
来源 · Robinson 1974 · Henle & Kleinberg 2003 · Keisler 2012
这意味着 —— 学生不用记「隐函数特殊规则」「链式特殊规则」「商式特殊规则」。 只有四条基本微分律,所有规则都从它们推出来。
§ 06 · 一个写法
教科书上「照着用就好」的二阶导数记号 $\frac{\mathrm{d}^2 y}{\mathrm{d}x^2}$ —— Bartlett & Khurshudyan 2018 指出它是错误的。 它省略了一项。
这是几乎所有教材给的答案 —— Bartlett & Khurshudyan 把它称作 「用就好别问」式的传统。
对 $y = x^3$ 算两遍:
\[ 6x \cdot \mathrm{d}x^2 \;-\; 3x^2 \cdot \mathrm{d}^2 x \]只有当 $x$ 是自变量时, $\mathrm{d}^2 x = 0$ 才能消掉。
平时消掉是对的,因为 x 是自变量;但在链式 / 隐函数 / 参数方程里 —— 这一项不能丢,否则 d² 在代数上不可操作。
这不是炫技 —— 这意味着标准写法在很多场合静默丢失了信息。 d²y/dx² 之所以「答案是 6x」,是因为我们偷偷假设了 x 是自变量。
§ 07 · 历史
微分能当代数用,技术上没问题;但数学家有哲学上的洁癖。 从 Berkeley 到 Kronecker 到 Hilbert,每一代都有人拒绝「无穷小」这个概念。
但怀疑论的传统已经造成了实际损失: 微分被赶到课程角落,导数 d/dx 成了主角,一用就是一百年。 Robinson 的工作本可以让微分早回课堂。
§ 08 · 重构
Bartlett 的整套提议可以浓缩成一句话 —— 把「同一个算子」从显函数一路推到隐函数 / 多元 / 高阶 / 链式, 让学生练一次,几十种情况都通。
if 显函数: 记一套 elif 隐函数: 再记一套 elif 多元: 再记一套 elif 链式: 再记一套 elif 高阶: 再记一套 elif 反函数: 再记一套 elif 参数方程:再记一套
学生拿到一道题,第一反应是分类 —— 「这属于哪种情况?」然后查表选公式。
d(uv) = u·d(v) + v·d(u) 乘积律 d(f∘g) = f'(g)·d(g) 链式律 derivative(eq, x): diff(eq) → solve(dy/dx) 微分 + 代数求解
显 / 隐 / 多元 / 高阶 / 链式 / 反函数 —— 全走同一条路。学生拿到一道题,第一反应是动手,不是分类。
这就是「refactoring」的本意 —— 不是发明新东西,是识别核心,把变形收回到一处。
§ 09 · 余响
一百年没动过的教法,
在一篇论文里被提议重构。
曾经被认为「不够严谨」的微分,
被 Robinson 重新严格化了。
曾经被认为「必备前置」的极限,
被建议放到课程最后。
两件事都指向同一个结论 ——
教学上的难,常常不是数学本身的难,
是组织方式的难。
Simplifying and Refactoring Introductory Calculus · Jonathan Bartlett · arXiv:1808.05517 · 2018