JOVANA
Library Glossary Getting Started Three Levels Fields How it works Mission
Join the mission
All guides

定积分:把无穷多片加起来

当没有一个整齐的矩形可以指着说「就是它」,你要怎么量出一条**曲线**下方的面积?这个窍门比微积分还古老:把区域切成一条条细长条,假装每条都是矩形,然后相加。这些长条永远拼不严丝合缝——于是你把它们做得更细、再更细,去追逐总和所**趋向**的东西。这场追逐有一个归宿,是一个单一的数字,这个数字就是**[[definite-integral|定积分]]**。这篇导读从零把它搭起来,并说明为什么它远不止是「面积」而已。

古老的难题:曲线下方的面积

矩形的面积你闭着眼都能算:宽乘以高。三角形、圆、梯形——几何为每一种都递给你一个公式。可现在画一条起伏的曲线,比如 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 个矩形,每个宽为 dx、高为 f(x_i)。这个和是 f 从 a 到 b 下方面积的一个估计——还不是答案,只是一块踏脚石。

在每条长条里,你该读哪里的高度?你有得选,而这个选择给这个和起了名字。读每条边缘的高度,你得到左黎曼和;读边缘,是右黎曼和;读正中间,是中点和,通常它贴真值贴得最紧。对一条光滑曲线,当 n 很小时这些彼此略有出入——可随着长条变细,它们的分歧朝着「无」收缩。

  1. 决定你要多少条长条 n,并算出宽度 dx = (b - a) / n。
  2. 在每条长条里,选一个取样点(左、右或中间),量出那里的高度 f(x_i)。
  3. 把每个矩形的面积取作 f(x_i) * dx,再把这 n 个全部累加成一个总和。
  4. 现在增大 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.
定积分是黎曼和的极限。这个符号来自代表「求和」的长长的 S;dx 就是 dx = (b - a)/n 在长条消逝时所变成的东西。

而结果是一个单一的数字,不是一个函数。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
随着 n 增大、dx 缩小,左黎曼和朝着 1/3 = 0.3333… 攀升。在任何有限的 n 上它都不会正好落定,但它所趋向的那个极限,就是定积分。

盯着那一列数字一点点爬向 0.3333…,就是整个概念的缩影。我们从来没有真的加完无穷多片——没有哪台计算机能办到——但我们也不需要。我们只需要看出*这些总和在奔向哪里*,而一个光滑的函数对此毫不含糊。那个归宿,就是定积分。