古老的难题:曲线下方的面积
矩形的面积你闭着眼都能算:宽乘以高。三角形、圆、梯形——几何为每一种都递给你一个公式。可现在画一条起伏的曲线,比如 y = x^2,问你被这条曲线、x 轴,以及 x = a 和 x = b 两条竖线围住的面积是多少。书后面没有现成的公式。上边缘是弯的,所以没有哪个单一的「宽乘高」管用。这就是面积问题,在微积分驯服它之前,人们和它缠斗了两千年。
那个突破性的想法很谦卑:如果你没法一口气量出弯弯曲曲的区域,那就用你*能*量的形状去把它铺满。把从 a 到 b 的区间切成一排细长的竖长条。每条都有一个弯的顶,可只要它够窄,那个顶就几乎是平的——于是就把这条当成一个普通矩形。把所有矩形面积加起来,你就得到了整体的一个估计。它会差一点点,但只差一点点,而这点误差,是我们能够挤压掉的。
黎曼和:切、量、加
我们把这个计划说精确。取从 a 到 b 的区间,把它分成 n 个相等的小段。每一段的宽度是 dx = (b - a) / n。在第 i 条长条里,挑一个取样点 x_i,量出曲线在那里的高度 f(x_i),把这条当成一个高为 f(x_i)、宽为 dx 的矩形。它的面积是 f(x_i) * dx。把这 n 个全加起来,你就有了一个[[riemann-sum|黎曼和]]:
Riemann sum = f(x_1)*dx + f(x_2)*dx + ... + f(x_n)*dx
= sum from i = 1 to n of f(x_i) * dx
where dx = (b - a) / n在每条长条里,你该读哪里的高度?你有得选,而这个选择给这个和起了名字。读每条左边缘的高度,你得到左黎曼和;读右边缘,是右黎曼和;读正中间,是中点和,通常它贴真值贴得最紧。对一条光滑曲线,当 n 很小时这些彼此略有出入——可随着长条变细,它们的分歧朝着「无」收缩。
- 决定你要多少条长条 n,并算出宽度 dx = (b - a) / n。
- 在每条长条里,选一个取样点(左、右或中间),量出那里的高度 f(x_i)。
- 把每个矩形的面积取作 f(x_i) * dx,再把这 n 个全部累加成一个总和。
- 现在增大 n——翻一倍,再翻一倍——看这个总和是否朝着一个固定的数字安顿下来。
把和变成一个数字的那个极限
这就是它的核心。黎曼和只是个估计,任何有限的 n 都会让它略有偏差。可把 n 往上推——长条更多、每条更细、dx 朝着 0 收缩——一条规规矩矩的曲线就会让这个和逼向某一个固定的值。f 从 a 到 b 的[[definite-integral|定积分]],*被定义*为当 n -> 无穷(等价地,当 dx -> 0)时,这些和的[[limit|极限]]。它不是那个和本身;它是这些和所趋向的那个数字。我们这样把它写下来:
integral from a to b of f(x) dx = lim (n -> infinity) sum from i = 1 to n f(x_i) * dx The elongated S (the integral sign) is a stretched 'sum'. The dx is the leftover width of each slice, shrunk to nothing.
而结果是一个单一的数字,不是一个函数。f 从 a 到 b 的定积分,把整段区间一口吞下,报出一个值——从速度曲线得到的总距离,从电流得到的总电荷,从赚钱速率得到的总利润。这就是「定」的意思:上下界 a 和 b 被钉死了,所以答案是确定的、是数值。(把界去掉,你得到的是别的东西——一个[[antiderivative|原函数]],一整族函数——接下来的台阶会把它连回到这里。)
用几行代码看着它收敛
空谈是廉价的;我们就把这个极限跑一遍。我们用左黎曼和去近似 f(x) = x^2 从 0 到 1 的积分,然后把 n 摇大,看这个总和逼近过来。精确答案——下一级台阶会让你能用手算出来——是 1/3。
def f(x):
return x * x
a, b = 0.0, 1.0
for n in [4, 10, 100, 1000, 100000]:
dx = (b - a) / n
total = 0.0
for i in range(n):
x_i = a + i * dx # left edge of strip i
total += f(x_i) * dx
print(n, total)
# n Riemann sum
# 4 0.21875
# 10 0.285
# 100 0.32835
# 1000 0.3328335
# 100000 0.33333283... -> heading for 1/3盯着那一列数字一点点爬向 0.3333…,就是整个概念的缩影。我们从来没有真的加完无穷多片——没有哪台计算机能办到——但我们也不需要。我们只需要看出*这些总和在奔向哪里*,而一个光滑的函数对此毫不含糊。那个归宿,就是定积分。