← 回到目录
高 等 数 学 · 第 三 章 3.8

牛顿切线法:
二分法砍 19 刀的活,
它 4 步做完

第三章的最后一节。它把这一章造的工具,用来干一件最实在的活:解一个解不出来的方程。

第 1 幕

第六页那把刀,砍得太慢了

第六页用二分法找过 x³ − x − 2 = 0 的根。它一定能找到——但很慢。

那一页的作业算过:要把误差从 0.5 压到 10⁻⁶得砍 19 刀
因为每砍一刀,区间只减半:1 → 0.5 → 0.25 → …

慢的原因不难找:二分法只看了函数的一样东西——符号。
它知道"根在这段里",可对根更靠近哪一头一无所知。

你手上明明有一整条曲线的信息,它却只用了一个正负号。
顺带说清一件事:二分法凭什么一定管用。
靠的是第六页的零点定理——连续函数在两端异号,中间必有根。
它只要求"连续",一个字都不多。正因为要求低,它才那么稳;也正因为知道得少,它才那么慢。
第 2 幕

把曲线换成切线

曲线的零点解不出来。但切线是一条直线,直线的零点小学生都会解。

于是:在 x₀ 处作切线,拿切线与 x 轴的交点当作新的猜测

一步:从 x₀ 顺着切线滑到 x 轴,落点就是 x₁
x₁ = x₀ − f(x₀) / f′(x₀)

公式一行就推得出来:切线是 y = f(x₀) + f′(x₀)(x − x₀),令 y = 0 解 x。

"用切线代替曲线"这句话,你已经听过三次了。
第七页:切线是割线的极限位置。
第十四页:微分就是用切线代替曲线,dy ≈ Δy
这一页:解方程时,也用切线代替曲线。
同一个动作,第三次派上用场——而这次换来的是速度。
第 3 幕

看它扑向根

还是 x³ − x − 2 = 0,从 x₀ = 2 出发。拖动看每一步:

xn误差对比:二分法此时的误差
024.8e−15.0e−1
11.6363641.1e−12.5e−1
21.5303929.0e−31.2e−1
31.5214416.2e−56.2e−2
41.52137972.9e−93.1e−2
看误差那一列的规律
1.1e−1 → 9.0e−3 → 6.2e−5 → 2.9e−9
每一步的误差,大约是上一步误差的平方。
换句话说:正确的有效数字位数,每走一步就翻一倍。这叫二次收敛
二分法那一列是每次减半,一步只多赚 0.3 位——两者根本不是一个量级。
二分法一步"多赚 0.3 位有效数字",这个 0.3 是哪来的?
来自 log₁₀ 2 ≈ 0.301
每砍一刀误差除以 2,而"有效数字位数"看的是误差的数量级,也就是 −log₁₀(误差)——
误差除以 2,这个数就增加 log₁₀2 ≈ 0.301
所以要多拿 6 位有效数字,二分法得砍 6/0.301 ≈ 20 刀——这正是第六页那个 19 的来历。
而牛顿法拿 6 位,从 1 位起算只要 3 步(1→2→4→8)。
第 4 幕

⚠️ 支点:牛顿法翻车的三种方式

二分法只要两端异号,就一定收敛。牛顿法没有这个保证——它快,但它会翻车。

四个开关,把三种典型翻车各看一遍:

三种翻车有一个共同点:切线把你带到了一个更糟的地方。
而二分法永远不会——因为它压根不看切线,只把区间对折。

牛顿法用的信息更多,所以更快;也正因为多用了信息,它才可能被那些信息误导。
⚠️ 教科书上的收敛条件,其实就是在排除这三种情形
要求 f′ ≠ 0(排除第 ②)、f″ 不变号、初值离根足够近(排除第 ③④)。
那些条件不是凭空写的,每一条背后都站着一张翻车的图。
既然牛顿法可能翻车,工程上为什么还敢用?真实的数值库是怎么做的?
把两把刀合起来用。
先用二分法(或类似的稳妥办法)把根圈进一个足够小的区间——这一步有保证;
区间够小之后再切换到牛顿法冲刺——这一步够快。
这就是 Brent 法一类"混合算法"的思路,也是 SciPy、MATLAB 里默认求根器的做法。
工程上很少非要在"稳"和"快"之间二选一——通常是先用稳的把范围锁住,再用快的收尾。
第 5 幕

两把刀,摆在一起看

二分法牛顿切线法
要求函数只要连续还要可导
每步要算一次 ff 和 f′ 各一次
收敛速度线性(误差减半)二次(有效位翻倍)
会不会失败不会,一定收敛会:循环、跑飞、除零
靠的定理零点定理(第六页)泰勒公式(第十页)
没有免费的快。
牛顿法的速度是拿两样东西换的:多交出一个条件(可导),外加放弃"一定成功"的保证。

这张表值得记住的不是哪一列更好,而是那个交换本身——
工程里几乎所有"更快的算法",都是这么换来的。
第 6 幕

它其实是泰勒公式砍到一次

为什么偏偏是二次收敛?把泰勒展开写出来,答案就在眼前:

"扔掉的是几阶",决定了这个方法有多快。
这句话你已经在三处见过:第四页(阶决定谁可以忽略)、第二十一页(微元法要求零头高阶)、
这一页(扔掉二阶,换来二次收敛)。

整个数值计算这门课,讲的就是"扔什么、扔掉之后错多少"。
牛顿法是"扔掉二阶项"。如果连一阶项也扔掉会怎样?如果保留二阶项又会怎样?
扔掉一阶项就什么都不剩了——方程变成 f(x₀) = 0,要么恰好成立、要么无解,迭代根本走不动
保留二阶项就得解一个二次方程,收敛会更快(三次收敛),这叫哈雷法
可它每步要多算一个 f″——快了一点,代价涨了一截。
实际上很少有人用:牛顿法的二次收敛已经够快,多算一阶导数常常不划算。又是那个交换:更快的方法,总要交更多东西出去。
顺手解释一个上古算法
√a 就是解 x² − a = 0。套牛顿公式:
x ← x − (x²−a)/(2x) = (x + a/x) / 2
这就是巴比伦人四千年前用的开方法——取猜测值和 a/x 的平均。
√2 从 1 出发:1 → 1.5 → 1.41667 → 1.414216 → 1.4142136四步到八位有效数字。
你手机按下 √ 时,芯片里跑的就是它的近亲。
第 7 幕

这一章到此结束

回头看第三章做了什么:

它给了什么
3.1 中值定理从"一个点"通向"一整段"的桥
3.2 洛必达 · 3.3 泰勒算未定式、用多项式代替函数
3.4–3.6 单调凹凸与作图不描点也能知道图像长什么样
3.7 曲率把"弯"变成一个数
3.8 近似解拿上面这些去解一个解不出来的方程
这一章的名字叫「导数的应用」,而最后这一节最配得上这个名字:
它要解的方程没有公式解——五次以上的方程根本不存在求根公式(阿贝尔定理),
超越方程更不用说。

可我们照样能把根算到任意多位。靠的不是解出它,是一步步逼近它。
这也是整个微积分最本质的态度:算不出来的东西,用能算的东西一层层逼上去。
第 8 幕

整节话,就这三行

牛顿法 = 用切线代替曲线,解切线的零点:x ← x − f/f′
二次收敛:有效数字每步翻倍,因为扔掉的是二阶项
快是换来的:多要一个"可导",外加放弃"一定收敛"

工程上的常规做法:先用稳的把范围锁住,再用快的收尾。

今 天 的 任 务

八道,第 3、5、7 题是这一页的命门

凡是迭代题,把每一步的 x 和误差都列成表。这一节的全部意思都在那张表的第三列里。

  1. 推一遍 x₁ = x₀ − f(x₀)/f′(x₀)写出切线方程,令 y=0。三行
  2. 用牛顿法解 x² − 2 = 0,从 x₀ = 1 出发算 4 步先化简出迭代式 (x + 2/x)/2。答案见第 6 幕
  3. ⚠️ 接上题,把每一步的误差写出来(与 1.41421356 比),并说明它们之间是什么关系相邻两个误差是平方关系。这一列才是这道题的重点
  4. 用牛顿法解 x³ − x − 2 = 0,从 x₀ = 2 出发算 3 步对着第 3 幕的表核一遍
  5. ⚠️ 取 f(x) = x³ − 2x + 2x₀ = 0算两步看看发生了什么会回到 0。先动手算,再回头看第 4 幕第 ③ 个开关
  6. 为什么 f′(x₀) = 0 时牛顿法用不了?用图说,不要只说"分母为零"切线是水平的,它和 x 轴没有交点
  7. ⚠️ 二分法要把误差压到 10⁻⁶ 需要约 20 步,牛顿法只要 4 步。写清楚这个差距是怎么来的,以及牛顿法为此付出了什么答案要同时出现"二次收敛"和"不保证收敛"
  8. 设计一个求 ∛a 的迭代公式解 x³−a=0。答案 x ← (2x + a/x²)/3。用它算 ∛10 试试,从 x₀=2 起
第 3 题的那一列误差,请用科学计数法写(如 8.6e−3),别写成小数。
写成科学计数法,"每步指数翻倍"才会跳出来;写成 0.0086 你只会觉得"变小了"。
怎么记录,决定你能不能看见规律。
对完答案,每道错题旁只写一句:
我是迭代式推错没注意 f′ 也要重算把二分法和牛顿法的适用条件搞混,还是纯算错
做 完 之 后