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

泰勒级数:把函数当作无穷多项式

计算器是怎么算出 sin(0.7) 或 e^0.3 的?它并不「知道」这些值——它是把一个多项式加起来。[[taylor-series|泰勒级数]]用一个光滑[[function-calculus|函数]]自身的[[derivative-calculus|导数]],在某一点附近把它重建出来,把 e^x、sin、cos 这样的曲线变成 x 各次幂的无穷和。这是把[[linear-approximation|线性逼近]]推到极致:多留几项,就多一分精度。

从切线到「切多项式」

在上一阶你见过线性逼近:在一点附近,一条光滑曲线能被它的切线 L(x) = f(a) + f'(a)(x - a) 很好地贴合。这条线在 x = a 处与 f 有两点一致——相同的高度和相同的斜率。但直线不会弯,所以一离开就会偏掉。补救办法很自然:再加一项,让它也匹配曲线的弯曲,然后再加一项管弯曲怎么变,依此类推。每加一项,就多强制一阶导数一致。结果是一个越来越紧贴曲线的多项式

写出来,f 在点 a 附近的泰勒级数是 f(x) = f(a) + f'(a)(x - a) + f''(a)/2! (x - a)^2 + f'''(a)/3! (x - a)^3 + ... 。第 n 项用的是 f 在 a 处的 n 阶导数,除以 n!(n 的阶乘:2! = 2,3! = 6,4! = 24)。注意前两项恰好就是切线——线性逼近不过是一条提前打住的泰勒级数。

一阶一阶地搭出 e^x

最干净的例子是 e^x,因为它是自己的导数:e^x 的每一阶导数还是 e^x,而在 x = 0 处每一阶都等于 1。把这些 1 代进公式,分母里就只剩下阶乘了。这同时也是一条幂级数——一个关于 x 各次幂的无穷多项式——而它恰好对每一个实数 x 都收敛到 e^x。

e^x = 1 + x + x^2/2! + x^3/3! + x^4/4! + ...

Try x = 1 (this should approach e ~ 2.71828):
  1                      = 1
  + 1                    = 2
  + 1/2                  = 2.5
  + 1/6                  = 2.6667
  + 1/24                 = 2.7083
  + 1/120                = 2.7167
  + 1/720                = 2.71806
  ... partial sums climb toward 2.71828
每一行是一个部分和。随着你不断加项,累计总和逐步逼近 e——这就是「级数收敛到 e」的含义。

注意这里的引擎和前几阶是同一个:一条无穷级数收敛,当且仅当它的部分和趋于一个有限的极限。这个多项式从不真正结束;我们说「相等」,意思是这些累计总和能要多接近 e^x 就多接近、并稳定地保持下去。阶乘增长得极其凶猛,所以后面的项迅速缩到几乎为零,总和很快就稳定下来。

正弦、余弦,以及计算器为何钟爱它

sin 和 cos 是下一对经典例子。它们的导数按 sin -> cos -> -sin -> -cos -> sin 循环,所以在 x = 0 处取值依次是 0, 1, 0, -1,不断重复。这些 0 构成的规律恰好删掉了一半的项:sin 只留奇数次幂,cos 只留偶数次幂,符号正负交替。

sin(x) = x - x^3/3! + x^5/5! - x^7/7! + ...   (odd powers)
cos(x) = 1 - x^2/2! + x^4/4! - x^6/6! + ...   (even powers)

# Estimate sin(0.5) with just three terms:
x = 0.5
x - x^3/6 + x^5/120
  = 0.5 - 0.0208333 + 0.0002604
  = 0.4794271
(true sin(0.5) = 0.4794255...  -> off by ~0.0000016)
仅三项就把 sin(0.5) 算准到小数点后六位——而且只用到乘、加、除,这正是芯片所能做的全部。

这就是你的计算器、以及物理近似背后的秘密。芯片无法直接求 sin 或 e^x——它只会加、减、乘、除。一条截断的泰勒级数恰恰由这些运算搭成,于是机器加上几项,一旦下一项比所需精度还小就停下。物理学家反过来用同一招:对小角度,他们直接把 sin(x) 换成 x,或把 cos(x) 换成 1 - x^2/2,把一道难方程变成一道容易的。

它能信到多远?收敛半径

这里有个诚实的提醒。对 e^x、sin、cos,级数处处收敛,但大多数级数只在中心附近一个有限的窗口内才管用。存在一个数 R,叫收敛半径,使得这条幂级数在 |x - a| < R 时收敛,在 |x - a| > R 时发散。在窗口之内,这个无穷多项式确实等于该函数;在窗口之外,部分和会炸开,公式毫无意义。

一个小例子能说明为什么窗口会存在。函数 1/(1 - x) 的几何级数是 1 + x + x^2 + x^3 + ... 。取 x = 0.5,每一项都减半,最终稳定在 2——而 1/(1 - 0.5) 确实等于 2。但取 x = 2:各项 1, 2, 4, 8, ... 爆炸式增长,于是级数发散,尽管 1/(1 - 2) = -1 是个完全正常的数。这里 R = 1:只有当 |x| < 1 时,公式才等于该函数。